@@ -10,6 +10,7 @@ use rand_core::{CryptoRng, RngCore};
10
10
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
11
11
use signature:: {
12
12
DigestVerifier , RandomizedDigestSigner , RandomizedSigner , SignatureEncoding , Verifier ,
13
+ Keypair ,
13
14
} ;
14
15
use subtle:: ConstantTimeEq ;
15
16
@@ -526,10 +527,6 @@ impl<D> SigningKey<D>
526
527
where
527
528
D : Digest ,
528
529
{
529
- pub ( crate ) fn key ( & self ) -> & RsaPrivateKey {
530
- & self . inner
531
- }
532
-
533
530
pub fn new ( key : RsaPrivateKey ) -> Self {
534
531
Self {
535
532
inner : key,
@@ -574,6 +571,18 @@ where
574
571
}
575
572
}
576
573
574
+ impl < D > Keypair for SigningKey < D >
575
+ where 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,18 @@ where
697
702
}
698
703
}
699
704
705
+ impl < D > Keypair for BlindedSigningKey < D >
706
+ where D : Digest ,
707
+ {
708
+ type VerifyingKey = VerifyingKey < D > ;
709
+ fn verifying_key ( & self ) -> Self :: VerifyingKey {
710
+ VerifyingKey {
711
+ inner : self . inner . to_public_key ( ) ,
712
+ phantom : Default :: default ( ) ,
713
+ }
714
+ }
715
+ }
716
+
700
717
impl < D > RandomizedSigner < Signature > for BlindedSigningKey < D >
701
718
where
702
719
D : Digest + FixedOutputReset ,
@@ -758,7 +775,7 @@ where
758
775
}
759
776
}
760
777
761
- #[ derive( Debug , Clone ) ]
778
+ #[ derive( Debug ) ]
762
779
pub struct VerifyingKey < D >
763
780
where
764
781
D : Digest ,
@@ -767,6 +784,16 @@ where
767
784
phantom : PhantomData < D > ,
768
785
}
769
786
787
+ /* Implemented manually so we don't have to bind D with Clone */
788
+ impl < D > Clone for VerifyingKey < D > where D : Digest {
789
+ fn clone ( & self ) -> Self {
790
+ Self {
791
+ inner : self . inner . clone ( ) ,
792
+ phantom : Default :: default ( ) ,
793
+ }
794
+ }
795
+ }
796
+
770
797
impl < D > VerifyingKey < D >
771
798
where
772
799
D : Digest ,
@@ -797,54 +824,6 @@ where
797
824
}
798
825
}
799
826
800
- impl < D > From < SigningKey < D > > for VerifyingKey < D >
801
- where
802
- D : Digest ,
803
- {
804
- fn from ( key : SigningKey < D > ) -> Self {
805
- Self {
806
- inner : key. key ( ) . into ( ) ,
807
- phantom : Default :: default ( ) ,
808
- }
809
- }
810
- }
811
-
812
- impl < D > From < & SigningKey < D > > for VerifyingKey < D >
813
- where
814
- D : Digest ,
815
- {
816
- fn from ( key : & SigningKey < D > ) -> Self {
817
- Self {
818
- inner : key. key ( ) . into ( ) ,
819
- phantom : Default :: default ( ) ,
820
- }
821
- }
822
- }
823
-
824
- impl < D > From < BlindedSigningKey < D > > for VerifyingKey < D >
825
- where
826
- D : Digest ,
827
- {
828
- fn from ( key : BlindedSigningKey < D > ) -> Self {
829
- Self {
830
- inner : key. key ( ) . into ( ) ,
831
- phantom : Default :: default ( ) ,
832
- }
833
- }
834
- }
835
-
836
- impl < D > From < & BlindedSigningKey < D > > for VerifyingKey < D >
837
- where
838
- D : Digest ,
839
- {
840
- fn from ( key : & BlindedSigningKey < D > ) -> Self {
841
- Self {
842
- inner : key. key ( ) . into ( ) ,
843
- phantom : Default :: default ( ) ,
844
- }
845
- }
846
- }
847
-
848
827
impl < D > Verifier < Signature > for VerifyingKey < D >
849
828
where
850
829
D : Digest + FixedOutputReset ,
@@ -905,7 +884,7 @@ mod test {
905
884
use sha1:: { Digest , Sha1 } ;
906
885
#[ cfg( feature = "hazmat" ) ]
907
886
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
908
- use signature:: { DigestVerifier , RandomizedDigestSigner , RandomizedSigner , Verifier } ;
887
+ use signature:: { DigestVerifier , RandomizedDigestSigner , RandomizedSigner , Verifier , Keypair } ;
909
888
910
889
fn get_private_key ( ) -> RsaPrivateKey {
911
890
// In order to generate new test vectors you'll need the PEM form of this key:
@@ -1089,7 +1068,7 @@ mod test {
1089
1068
let tests = [ "test\n " ] ;
1090
1069
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1091
1070
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1092
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1071
+ let verifying_key = signing_key. verifying_key ( ) ;
1093
1072
1094
1073
for test in & tests {
1095
1074
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1106,7 +1085,7 @@ mod test {
1106
1085
let tests = [ "test\n " ] ;
1107
1086
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1108
1087
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1109
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1088
+ let verifying_key = signing_key. verifying_key ( ) ;
1110
1089
1111
1090
for test in & tests {
1112
1091
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1123,7 +1102,7 @@ mod test {
1123
1102
let tests = [ "test\n " ] ;
1124
1103
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1125
1104
let signing_key = SigningKey :: new ( priv_key) ;
1126
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1105
+ let verifying_key = signing_key. verifying_key ( ) ;
1127
1106
1128
1107
for test in & tests {
1129
1108
let mut digest = Sha1 :: new ( ) ;
@@ -1145,7 +1124,7 @@ mod test {
1145
1124
let tests = [ "test\n " ] ;
1146
1125
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1147
1126
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1148
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1127
+ let verifying_key = signing_key. verifying_key ( ) ;
1149
1128
1150
1129
for test in & tests {
1151
1130
let mut digest = Sha1 :: new ( ) ;
@@ -1206,7 +1185,7 @@ mod test {
1206
1185
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1207
1186
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1208
1187
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1209
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1188
+ let verifying_key = signing_key. verifying_key ( ) ;
1210
1189
1211
1190
for test in & tests {
1212
1191
let sig = signing_key
@@ -1226,7 +1205,7 @@ mod test {
1226
1205
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1227
1206
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1228
1207
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1229
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1208
+ let verifying_key = signing_key. verifying_key ( ) ;
1230
1209
1231
1210
for test in & tests {
1232
1211
let sig = signing_key
0 commit comments