12
12
namespace l ::crypto {
13
13
14
14
// PKCS#8 format
15
- std::string ToPublicKeyFormat (std::string_view pkcsFormat ) {
15
+ std::string ToPKCSFormat (std::string_view content, bool publicKey ) {
16
16
std::stringstream stream;
17
- stream << " -----BEGIN PUBLIC KEY-----\n " ;
18
- stream << pkcsFormat;
17
+ stream << " -----BEGIN " ;
18
+ stream << (publicKey ? " PUBLIC" : " PRIVATE" );
19
+ stream << " KEY---- - \n " ;
20
+ stream << content;
19
21
stream << " \n " ;
20
- stream << " -----END PUBLIC KEY-----\n " ;
22
+ stream << " -----END " ;
23
+ stream << (publicKey ? " PUBLIC" : " PRIVATE" );
24
+ stream << " KEY---- - \n " ;
21
25
return stream.str ();
22
26
}
23
27
@@ -26,25 +30,25 @@ namespace l::crypto {
26
30
size_t prefixSize = 0 ;
27
31
if (x25519) {
28
32
if (publicKey) {
29
- auto & prefix = GetPemPrefix <true , true >();
33
+ auto & prefix = Get25519PemPrefix <true , true >();
30
34
memcpy (pem.data (), prefix.data (), prefix.size ());
31
35
prefixSize = prefix.size ();
32
36
}
33
37
else {
34
- auto & prefix = GetPemPrefix <false , true >();
38
+ auto & prefix = Get25519PemPrefix <false , true >();
35
39
memcpy (pem.data (), prefix.data (), prefix.size ());
36
40
memcpy (pem.data () + prefix.size (), rawkey.data (), rawkey.size ());
37
41
prefixSize = prefix.size ();
38
42
}
39
43
}
40
44
else {
41
45
if (publicKey) {
42
- auto & prefix = GetPemPrefix <true , false >();
46
+ auto & prefix = Get25519PemPrefix <true , false >();
43
47
memcpy (pem.data (), prefix.data (), prefix.size ());
44
48
prefixSize = prefix.size ();
45
49
}
46
50
else {
47
- auto & prefix = GetPemPrefix <false , false >();
51
+ auto & prefix = Get25519PemPrefix <false , false >();
48
52
memcpy (pem.data (), prefix.data (), prefix.size ());
49
53
prefixSize = prefix.size ();
50
54
}
@@ -281,20 +285,9 @@ namespace l::crypto {
281
285
}
282
286
283
287
std::string CryptoXED25519::GetPublicKeyPKCS8 () {
284
- return ToPublicKeyFormat (To25519PemKey (std::string_view (reinterpret_cast <const char *>(mPublicKey ), 32 ), true , true ));
288
+ return ToPKCSFormat (To25519PemKey (std::string_view (reinterpret_cast <const char *>(mPublicKey ), 32 ), true , true ));
285
289
}
286
290
287
-
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
291
bool CryptoED25519::Init () {
299
292
memset (mSeed , 0 , 32 );
300
293
if (ed25519_create_seed (&mSeed [0 ])) {
@@ -399,22 +392,8 @@ namespace l::crypto {
399
392
}
400
393
401
394
std::string CryptoED25519::GetPubKeyPem () {
402
- memcpy (mPemKey , " id-Ed25519" , 10 );
403
- mPemKey [10 ] = 1 ;
404
- mPemKey [11 ] = 3 ;
405
- mPemKey [12 ] = 101 ;
406
- mPemKey [13 ] = 112 ;
407
- memcpy (mPemKey + 10 + 4 , mPubKey , 32 );
408
- auto pemKey = std::string_view (reinterpret_cast <const char *>(mPemKey ), 46 );
409
- return l::serialization::base64_encode (pemKey);
410
- }
411
-
412
- std::string CryptoED25519::GetPubKeyPem2 () {
413
- static const std::array<unsigned char , 12 > mED25519Prefix = { 0x30 ,0x2a ,0x30 ,0x05 ,0x06 ,0x03 ,0x2b ,0x65 ,0x70 ,0x03 ,0x21 ,0x00 };
414
- memcpy (mPemKey , mED25519Prefix .data (), mED25519Prefix .size ());
415
- memcpy (mPemKey + 12 , mPubKey , 32 );
416
- auto pemKey = std::string_view (reinterpret_cast <const char *>(mPemKey ), 12 + 32 );
417
- return l::serialization::base64_encode (pemKey);
395
+ auto rawKey = std::string_view (reinterpret_cast <const char *>(mPemKey ), 32 );
396
+ return To25519PemKey (rawKey, false , true );
418
397
}
419
398
420
399
/*
@@ -426,8 +405,6 @@ namespace l::crypto {
426
405
privateKeyEncoding: {
427
406
type: 'pkcs8',
428
407
format: 'pem'
429
-
430
-
431
408
*/
432
409
bool CryptoED25519::Verify (std::string_view signature, std::string_view message, std::string_view publicKey) {
433
410
unsigned char * pubKey = reinterpret_cast <unsigned char *>(const_cast <char *>(publicKey.data ()));
0 commit comments