@@ -16,7 +16,7 @@ use rand_core::{CryptoRng, RngCore};
16
16
#[ cfg( feature = "hazmat" ) ]
17
17
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
18
18
use signature:: {
19
- DigestVerifier , RandomizedDigestSigner , RandomizedSigner , SignatureEncoding , Verifier ,
19
+ DigestVerifier , Keypair , RandomizedDigestSigner , RandomizedSigner , SignatureEncoding , Verifier ,
20
20
} ;
21
21
use subtle:: ConstantTimeEq ;
22
22
@@ -559,10 +559,6 @@ where
559
559
phantom : Default :: default ( ) ,
560
560
}
561
561
}
562
-
563
- pub ( crate ) fn key ( & self ) -> & RsaPrivateKey {
564
- & self . inner
565
- }
566
562
}
567
563
568
564
impl < D > From < RsaPrivateKey > for SigningKey < D >
@@ -592,6 +588,19 @@ where
592
588
}
593
589
}
594
590
591
+ impl < D > Keypair for SigningKey < D >
592
+ where
593
+ D : Digest ,
594
+ {
595
+ type VerifyingKey = VerifyingKey < D > ;
596
+ fn verifying_key ( & self ) -> Self :: VerifyingKey {
597
+ VerifyingKey {
598
+ inner : self . inner . to_public_key ( ) ,
599
+ phantom : Default :: default ( ) ,
600
+ }
601
+ }
602
+ }
603
+
595
604
impl < D > RandomizedSigner < Signature > for SigningKey < D >
596
605
where
597
606
D : Digest + FixedOutputReset ,
@@ -688,10 +697,6 @@ where
688
697
phantom : Default :: default ( ) ,
689
698
}
690
699
}
691
-
692
- pub ( crate ) fn key ( & self ) -> & RsaPrivateKey {
693
- & self . inner
694
- }
695
700
}
696
701
697
702
impl < D > From < RsaPrivateKey > for BlindedSigningKey < D >
@@ -721,6 +726,19 @@ where
721
726
}
722
727
}
723
728
729
+ impl < D > Keypair for BlindedSigningKey < D >
730
+ where
731
+ D : Digest ,
732
+ {
733
+ type VerifyingKey = VerifyingKey < D > ;
734
+ fn verifying_key ( & self ) -> Self :: VerifyingKey {
735
+ VerifyingKey {
736
+ inner : self . inner . to_public_key ( ) ,
737
+ phantom : Default :: default ( ) ,
738
+ }
739
+ }
740
+ }
741
+
724
742
impl < D > RandomizedSigner < Signature > for BlindedSigningKey < D >
725
743
where
726
744
D : Digest + FixedOutputReset ,
@@ -786,7 +804,7 @@ where
786
804
/// described in [RFC8017 § 8.1].
787
805
///
788
806
/// [RFC8017 § 8.1]: https://datatracker.ietf.org/doc/html/rfc8017#section-8.1
789
- #[ derive( Debug , Clone ) ]
807
+ #[ derive( Debug ) ]
790
808
pub struct VerifyingKey < D >
791
809
where
792
810
D : Digest ,
@@ -795,6 +813,19 @@ where
795
813
phantom : PhantomData < D > ,
796
814
}
797
815
816
+ /* Implemented manually so we don't have to bind D with Clone */
817
+ impl < D > Clone for VerifyingKey < D >
818
+ where
819
+ D : Digest ,
820
+ {
821
+ fn clone ( & self ) -> Self {
822
+ Self {
823
+ inner : self . inner . clone ( ) ,
824
+ phantom : Default :: default ( ) ,
825
+ }
826
+ }
827
+ }
828
+
798
829
impl < D > VerifyingKey < D >
799
830
where
800
831
D : Digest ,
@@ -826,54 +857,6 @@ where
826
857
}
827
858
}
828
859
829
- impl < D > From < SigningKey < D > > for VerifyingKey < D >
830
- where
831
- D : Digest ,
832
- {
833
- fn from ( key : SigningKey < D > ) -> Self {
834
- Self {
835
- inner : key. key ( ) . into ( ) ,
836
- phantom : Default :: default ( ) ,
837
- }
838
- }
839
- }
840
-
841
- impl < D > From < & SigningKey < D > > for VerifyingKey < D >
842
- where
843
- D : Digest ,
844
- {
845
- fn from ( key : & SigningKey < D > ) -> Self {
846
- Self {
847
- inner : key. key ( ) . into ( ) ,
848
- phantom : Default :: default ( ) ,
849
- }
850
- }
851
- }
852
-
853
- impl < D > From < BlindedSigningKey < D > > for VerifyingKey < D >
854
- where
855
- D : Digest ,
856
- {
857
- fn from ( key : BlindedSigningKey < D > ) -> Self {
858
- Self {
859
- inner : key. key ( ) . into ( ) ,
860
- phantom : Default :: default ( ) ,
861
- }
862
- }
863
- }
864
-
865
- impl < D > From < & BlindedSigningKey < D > > for VerifyingKey < D >
866
- where
867
- D : Digest ,
868
- {
869
- fn from ( key : & BlindedSigningKey < D > ) -> Self {
870
- Self {
871
- inner : key. key ( ) . into ( ) ,
872
- phantom : Default :: default ( ) ,
873
- }
874
- }
875
- }
876
-
877
860
impl < D > Verifier < Signature > for VerifyingKey < D >
878
861
where
879
862
D : Digest + FixedOutputReset ,
@@ -934,7 +917,7 @@ mod test {
934
917
use sha1:: { Digest , Sha1 } ;
935
918
#[ cfg( feature = "hazmat" ) ]
936
919
use signature:: hazmat:: { PrehashVerifier , RandomizedPrehashSigner } ;
937
- use signature:: { DigestVerifier , RandomizedDigestSigner , RandomizedSigner , Verifier } ;
920
+ use signature:: { DigestVerifier , Keypair , RandomizedDigestSigner , RandomizedSigner , Verifier } ;
938
921
939
922
fn get_private_key ( ) -> RsaPrivateKey {
940
923
// In order to generate new test vectors you'll need the PEM form of this key:
@@ -1118,7 +1101,7 @@ mod test {
1118
1101
let tests = [ "test\n " ] ;
1119
1102
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1120
1103
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1121
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1104
+ let verifying_key = signing_key. verifying_key ( ) ;
1122
1105
1123
1106
for test in & tests {
1124
1107
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1135,7 +1118,7 @@ mod test {
1135
1118
let tests = [ "test\n " ] ;
1136
1119
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1137
1120
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1138
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1121
+ let verifying_key = signing_key. verifying_key ( ) ;
1139
1122
1140
1123
for test in & tests {
1141
1124
let sig = signing_key. sign_with_rng ( & mut rng, test. as_bytes ( ) ) ;
@@ -1152,7 +1135,7 @@ mod test {
1152
1135
let tests = [ "test\n " ] ;
1153
1136
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1154
1137
let signing_key = SigningKey :: new ( priv_key) ;
1155
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1138
+ let verifying_key = signing_key. verifying_key ( ) ;
1156
1139
1157
1140
for test in & tests {
1158
1141
let mut digest = Sha1 :: new ( ) ;
@@ -1174,7 +1157,7 @@ mod test {
1174
1157
let tests = [ "test\n " ] ;
1175
1158
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1176
1159
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1177
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1160
+ let verifying_key = signing_key. verifying_key ( ) ;
1178
1161
1179
1162
for test in & tests {
1180
1163
let mut digest = Sha1 :: new ( ) ;
@@ -1235,7 +1218,7 @@ mod test {
1235
1218
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1236
1219
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1237
1220
let signing_key = SigningKey :: < Sha1 > :: new ( priv_key) ;
1238
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1221
+ let verifying_key = signing_key. verifying_key ( ) ;
1239
1222
1240
1223
for test in & tests {
1241
1224
let sig = signing_key
@@ -1255,7 +1238,7 @@ mod test {
1255
1238
let tests = [ Sha1 :: digest ( "test\n " ) ] ;
1256
1239
let mut rng = ChaCha8Rng :: from_seed ( [ 42 ; 32 ] ) ;
1257
1240
let signing_key = BlindedSigningKey :: < Sha1 > :: new ( priv_key) ;
1258
- let verifying_key = VerifyingKey :: from ( & signing_key) ;
1241
+ let verifying_key = signing_key. verifying_key ( ) ;
1259
1242
1260
1243
for test in & tests {
1261
1244
let sig = signing_key
0 commit comments