@@ -6,6 +6,7 @@ module.exports = {
66 write : write ,
77 writePkcs8 : writePkcs8 ,
88 pkcs8ToBuffer : pkcs8ToBuffer ,
9+ pkcs8PublicBitstringToBuffer : pkcs8PublicBitstringToBuffer ,
910
1011 readECDSACurve : readECDSACurve ,
1112 writeECDSACurve : writeECDSACurve
@@ -513,14 +514,17 @@ function writePkcs8RSAPublic(key, der) {
513514 der . endSequence ( ) ;
514515
515516 der . startSequence ( asn1 . Ber . BitString ) ;
517+ writePkcs8RSAPublicBitstring ( key , der ) ;
518+ der . endSequence ( ) ;
519+ }
520+
521+ function writePkcs8RSAPublicBitstring ( key , der ) {
516522 der . writeByte ( 0x00 ) ;
517523
518524 der . startSequence ( ) ;
519525 der . writeBuffer ( key . part . n . data , asn1 . Ber . Integer ) ;
520526 der . writeBuffer ( key . part . e . data , asn1 . Ber . Integer ) ;
521527 der . endSequence ( ) ;
522-
523- der . endSequence ( ) ;
524528}
525529
526530function writePkcs8DSAPrivate ( key , der ) {
@@ -546,9 +550,13 @@ function writePkcs8DSAPublic(key, der) {
546550 der . endSequence ( ) ;
547551
548552 der . startSequence ( asn1 . Ber . BitString ) ;
553+ writePkcs8DSAPublicBitstring ( key , der ) ;
554+ der . endSequence ( ) ;
555+ }
556+
557+ function writePkcs8DSAPublicBitstring ( key , der ) {
549558 der . writeByte ( 0x00 ) ;
550559 der . writeBuffer ( key . part . y . data , asn1 . Ber . Integer ) ;
551- der . endSequence ( ) ;
552560}
553561
554562function writeECDSACurve ( key , der ) {
@@ -601,6 +609,25 @@ function writePkcs8ECDSAPublic(key, der) {
601609 der . writeBuffer ( Q , asn1 . Ber . BitString ) ;
602610}
603611
612+ function pkcs8PublicBitstringToBuffer ( key ) {
613+ var der = new asn1 . BerWriter ( ) ;
614+ switch ( key . type ) {
615+ case 'rsa' :
616+ writePkcs8RSAPublicBitstring ( key , der ) ;
617+ break ;
618+ case 'dsa' :
619+ writePkcs8DSAPublicBitstring ( key , der ) ;
620+ break ;
621+ case 'ecdsa' :
622+ return ( key . part . Q . data ) ;
623+ case 'ed25519' :
624+ return ( key . part . A . data ) ;
625+ default :
626+ throw ( new Error ( 'Unsupported key type: ' + key . type ) ) ;
627+ }
628+ return ( der . buffer ) ;
629+ }
630+
604631function writePkcs8ECDSAPrivate ( key , der ) {
605632 writeECDSACurve ( key , der ) ;
606633 der . endSequence ( ) ;
0 commit comments