@@ -9,7 +9,7 @@ use rand_core::{CryptoRng, RngCore};
9
9
#[ cfg( feature = "hazmat" ) ]
10
10
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
11
11
use signature:: {
12
- DigestVerifier , RandomizedDigestSigner , RandomizedSigner , SignatureEncoding , Verifier ,
12
+ DigestVerifier , Keypair , RandomizedDigestSigner , RandomizedSigner , SignatureEncoding , Verifier ,
13
13
} ;
14
14
use subtle:: ConstantTimeEq ;
15
15
@@ -526,10 +526,6 @@ impl<D> SigningKey<D>
526
526
where
527
527
D : Digest ,
528
528
{
529
- pub ( crate ) fn key ( & self ) -> & RsaPrivateKey {
530
- & self . inner
531
- }
532
-
533
529
pub fn new ( key : RsaPrivateKey ) -> Self {
534
530
Self {
535
531
inner : key,
@@ -574,6 +570,19 @@ where
574
570
}
575
571
}
576
572
573
+ impl < D > Keypair for SigningKey < D >
574
+ where
575
+ D : Digest ,
576
+ {
577
+ type VerifyingKey = VerifyingKey < D > ;
578
+ fn verifying_key ( & self ) -> Self :: VerifyingKey {
579
+ VerifyingKey {
580
+ inner : self . inner . to_public_key ( ) ,
581
+ phantom : Default :: default ( ) ,
582
+ }
583
+ }
584
+ }
585
+
577
586
impl < D > RandomizedSigner < Signature > for SigningKey < D >
578
587
where
579
588
D : Digest + FixedOutputReset ,
@@ -649,10 +658,6 @@ impl<D> BlindedSigningKey<D>
649
658
where
650
659
D : Digest ,
651
660
{
652
- pub ( crate ) fn key ( & self ) -> & RsaPrivateKey {
653
- & self . inner
654
- }
655
-
656
661
pub fn new ( key : RsaPrivateKey ) -> Self {
657
662
Self {
658
663
inner : key,
@@ -697,6 +702,19 @@ where
697
702
}
698
703
}
699
704
705
+ impl < D > Keypair for BlindedSigningKey < D >
706
+ where
707
+ D : Digest ,
708
+ {
709
+ type VerifyingKey = VerifyingKey < D > ;
710
+ fn verifying_key ( & self ) -> Self :: VerifyingKey {
711
+ VerifyingKey {
712
+ inner : self . inner . to_public_key ( ) ,
713
+ phantom : Default :: default ( ) ,
714
+ }
715
+ }
716
+ }
717
+
700
718
impl < D > RandomizedSigner < Signature > for BlindedSigningKey < D >
701
719
where
702
720
D : Digest + FixedOutputReset ,
@@ -758,7 +776,7 @@ where
758
776
}
759
777
}
760
778
761
- #[ derive( Debug , Clone ) ]
779
+ #[ derive( Debug ) ]
762
780
pub struct VerifyingKey < D >
763
781
where
764
782
D : Digest ,
@@ -767,81 +785,46 @@ where
767
785
phantom : PhantomData < D > ,
768
786
}
769
787
770
- impl < D > VerifyingKey < D >
771
- where
772
- D : Digest ,
773
- {
774
- pub fn new ( key : RsaPublicKey ) -> Self {
775
- Self {
776
- inner : key,
777
- phantom : Default :: default ( ) ,
778
- }
779
- }
780
- }
781
-
782
- impl < D > From < RsaPublicKey > for VerifyingKey < D >
783
- where
784
- D : Digest ,
785
- {
786
- fn from ( key : RsaPublicKey ) -> Self {
787
- Self :: new ( key)
788
- }
789
- }
790
-
791
- impl < D > From < VerifyingKey < D > > for RsaPublicKey
792
- where
793
- D : Digest ,
794
- {
795
- fn from ( key : VerifyingKey < D > ) -> Self {
796
- key. inner
797
- }
798
- }
799
-
800
- impl < D > From < SigningKey < D > > for VerifyingKey < D >
788
+ /* Implemented manually so we don't have to bind D with Clone */
789
+ impl < D > Clone for VerifyingKey < D >
801
790
where
802
791
D : Digest ,
803
792
{
804
- fn from ( key : SigningKey < D > ) -> Self {
793
+ fn clone ( & self ) -> Self {
805
794
Self {
806
- inner : key . key ( ) . into ( ) ,
795
+ inner : self . inner . clone ( ) ,
807
796
phantom : Default :: default ( ) ,
808
797
}
809
798
}
810
799
}
811
800
812
- impl < D > From < & SigningKey < D > > for VerifyingKey < D >
801
+ impl < D > VerifyingKey < D >
813
802
where
814
803
D : Digest ,
815
804
{
816
- fn from ( key : & SigningKey < D > ) -> Self {
805
+ pub fn new ( key : RsaPublicKey ) -> Self {
817
806
Self {
818
- inner : key. key ( ) . into ( ) ,
807
+ inner : key,
819
808
phantom : Default :: default ( ) ,
820
809
}
821
810
}
822
811
}
823
812
824
- impl < D > From < BlindedSigningKey < D > > for VerifyingKey < D >
813
+ impl < D > From < RsaPublicKey > for VerifyingKey < D >
825
814
where
826
815
D : Digest ,
827
816
{
828
- fn from ( key : BlindedSigningKey < D > ) -> Self {
829
- Self {
830
- inner : key. key ( ) . into ( ) ,
831
- phantom : Default :: default ( ) ,
832
- }
817
+ fn from ( key : RsaPublicKey ) -> Self {
818
+ Self :: new ( key)
833
819
}
834
820
}
835
821
836
- impl < D > From < & BlindedSigningKey < D > > for VerifyingKey < D >
822
+ impl < D > From < VerifyingKey < D > > for RsaPublicKey
837
823
where
838
824
D : Digest ,
839
825
{
840
- fn from ( key : & BlindedSigningKey < D > ) -> Self {
841
- Self {
842
- inner : key. key ( ) . into ( ) ,
843
- phantom : Default :: default ( ) ,
844
- }
826
+ fn from ( key : VerifyingKey < D > ) -> Self {
827
+ key. inner
845
828
}
846
829
}
847
830
@@ -905,7 +888,7 @@ mod test {
905
888
use sha1:: { Digest , Sha1 } ;
906
889
#[ cfg( feature = "hazmat" ) ]
907
890
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
908
- use signature:: { DigestVerifier , RandomizedDigestSigner , RandomizedSigner , Verifier } ;
891
+ use signature:: { DigestVerifier , Keypair , RandomizedDigestSigner , RandomizedSigner , Verifier } ;
909
892
910
893
fn get_private_key ( ) -> RsaPrivateKey {
911
894
// In order to generate new test vectors you'll need the PEM form of this key:
@@ -1089,7 +1072,7 @@ mod test {
1089
1072
let tests = [ "test\n " ] ;
1090
1073
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1091
1074
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1092
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1075
+ let verifying_key = signing_key. verifying_key ( ) ;
1093
1076
1094
1077
for test in & tests {
1095
1078
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1106,7 +1089,7 @@ mod test {
1106
1089
let tests = [ "test\n " ] ;
1107
1090
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1108
1091
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1109
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1092
+ let verifying_key = signing_key. verifying_key ( ) ;
1110
1093
1111
1094
for test in & tests {
1112
1095
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1123,7 +1106,7 @@ mod test {
1123
1106
let tests = [ "test\n " ] ;
1124
1107
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1125
1108
let signing_key = SigningKey :: new ( priv_key) ;
1126
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1109
+ let verifying_key = signing_key. verifying_key ( ) ;
1127
1110
1128
1111
for test in & tests {
1129
1112
let mut digest = Sha1 :: new ( ) ;
@@ -1145,7 +1128,7 @@ mod test {
1145
1128
let tests = [ "test\n " ] ;
1146
1129
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1147
1130
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1148
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1131
+ let verifying_key = signing_key. verifying_key ( ) ;
1149
1132
1150
1133
for test in & tests {
1151
1134
let mut digest = Sha1 :: new ( ) ;
@@ -1206,7 +1189,7 @@ mod test {
1206
1189
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1207
1190
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1208
1191
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1209
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1192
+ let verifying_key = signing_key. verifying_key ( ) ;
1210
1193
1211
1194
for test in & tests {
1212
1195
let sig = signing_key
@@ -1226,7 +1209,7 @@ mod test {
1226
1209
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1227
1210
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1228
1211
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1229
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1212
+ let verifying_key = signing_key. verifying_key ( ) ;
1230
1213
1231
1214
for test in & tests {
1232
1215
let sig = signing_key
0 commit comments