1use crate::SignatureError;
2use signature::Verifier;
3use sui_sdk_types::SimpleSignature;
4use sui_sdk_types::UserSignature;
5
6pub struct SimpleVerifier;
7
8impl Verifier<SimpleSignature> for SimpleVerifier {
9 #[allow(unused_variables)]
10 fn verify(&self, message: &[u8], signature: &SimpleSignature) -> Result<(), SignatureError> {
11 match signature {
12 #[cfg(feature = "ed25519")]
13 SimpleSignature::Ed25519 {
14 signature,
15 public_key,
16 } => {
17 let verifying_key = crate::ed25519::Ed25519VerifyingKey::new(public_key)?;
18 verifying_key.verify(message, signature)
19 }
20 #[cfg(not(feature = "ed25519"))]
21 SimpleSignature::Ed25519 { .. } => Err(SignatureError::from_source(
22 "support for ed25519 is not enabled",
23 )),
24
25 #[cfg(feature = "secp256k1")]
26 SimpleSignature::Secp256k1 {
27 signature,
28 public_key,
29 } => {
30 let verifying_key = crate::secp256k1::Secp256k1VerifyingKey::new(public_key)?;
31 verifying_key.verify(message, signature)
32 }
33 #[cfg(not(feature = "secp256k1"))]
34 SimpleSignature::Secp256k1 { .. } => Err(SignatureError::from_source(
35 "support for secp256k1 is not enabled",
36 )),
37
38 #[cfg(feature = "secp256r1")]
39 SimpleSignature::Secp256r1 {
40 signature,
41 public_key,
42 } => {
43 let verifying_key = crate::secp256r1::Secp256r1VerifyingKey::new(public_key)?;
44 verifying_key.verify(message, signature)
45 }
46 #[cfg(not(feature = "secp256r1"))]
47 SimpleSignature::Secp256r1 { .. } => Err(SignatureError::from_source(
48 "support for secp256r1 is not enabled",
49 )),
50 }
51 }
52}
53
54impl Verifier<UserSignature> for SimpleVerifier {
55 fn verify(&self, message: &[u8], signature: &UserSignature) -> Result<(), SignatureError> {
56 let UserSignature::Simple(signature) = signature else {
57 return Err(SignatureError::from_source("not a simple signature"));
58 };
59
60 <Self as Verifier<SimpleSignature>>::verify(self, message, signature)
61 }
62}
63
64#[cfg(any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1",))]
65#[cfg_attr(
66 doc_cfg,
67 doc(cfg(any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1",)))
68)]
69#[rustfmt::skip]
70pub use keypair::{SimpleKeypair, SimpleVerifiyingKey};
71
72#[cfg(any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1",))]
73#[cfg_attr(
74 doc_cfg,
75 doc(cfg(any(feature = "ed25519", feature = "secp256r1", feature = "secp256k1",)))
76)]
77mod keypair {
78 use crate::SignatureError;
79 use signature::Signer;
80 use signature::Verifier;
81 use sui_sdk_types::MultisigMemberPublicKey;
82 use sui_sdk_types::SignatureScheme;
83 use sui_sdk_types::SimpleSignature;
84 use sui_sdk_types::UserSignature;
85
86 #[derive(Debug, Clone)]
87 pub struct SimpleKeypair {
88 inner: InnerKeypair,
89 }
90
91 #[derive(Debug, Clone)]
92 enum InnerKeypair {
93 #[cfg(feature = "ed25519")]
94 Ed25519(crate::ed25519::Ed25519PrivateKey),
95 #[cfg(feature = "secp256k1")]
96 Secp256k1(crate::secp256k1::Secp256k1PrivateKey),
97 #[cfg(feature = "secp256r1")]
98 Secp256r1(crate::secp256r1::Secp256r1PrivateKey),
99 }
100
101 impl SimpleKeypair {
102 pub fn scheme(&self) -> SignatureScheme {
103 match &self.inner {
104 #[cfg(feature = "ed25519")]
105 InnerKeypair::Ed25519(private_key) => private_key.scheme(),
106 #[cfg(feature = "secp256k1")]
107 InnerKeypair::Secp256k1(private_key) => private_key.scheme(),
108 #[cfg(feature = "secp256r1")]
109 InnerKeypair::Secp256r1(private_key) => private_key.scheme(),
110 }
111 }
112
113 pub fn verifying_key(&self) -> SimpleVerifiyingKey {
114 let verifying_key = match &self.inner {
115 #[cfg(feature = "ed25519")]
116 InnerKeypair::Ed25519(private_key) => {
117 InnerVerifyingKey::Ed25519(private_key.verifying_key())
118 }
119 #[cfg(feature = "secp256k1")]
120 InnerKeypair::Secp256k1(private_key) => {
121 InnerVerifyingKey::Secp256k1(private_key.verifying_key())
122 }
123 #[cfg(feature = "secp256r1")]
124 InnerKeypair::Secp256r1(private_key) => {
125 InnerVerifyingKey::Secp256r1(private_key.verifying_key())
126 }
127 };
128
129 SimpleVerifiyingKey {
130 inner: verifying_key,
131 }
132 }
133
134 pub fn public_key(&self) -> MultisigMemberPublicKey {
135 self.verifying_key().public_key()
136 }
137
138 #[cfg(feature = "pem")]
139 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
140 pub fn from_der(bytes: &[u8]) -> Result<Self, SignatureError> {
142 let private_key =
143 pkcs8::PrivateKeyInfo::try_from(bytes).map_err(SignatureError::from_source)?;
144
145 match private_key
146 .algorithm
147 .oids()
148 .map_err(SignatureError::from_source)?
149 {
150 #[cfg(feature = "ed25519")]
151 (ed25519_dalek::pkcs8::ALGORITHM_OID, None) => private_key
152 .try_into()
153 .map(crate::ed25519::Ed25519PrivateKey::from_dalek)
154 .map(InnerKeypair::Ed25519)
155 .map_err(SignatureError::from_source),
156
157 #[cfg(feature = "secp256r1")]
158 (
159 p256::elliptic_curve::ALGORITHM_OID,
160 Some(<p256::NistP256 as pkcs8::AssociatedOid>::OID),
161 ) => private_key
162 .try_into()
163 .map(crate::secp256r1::Secp256r1PrivateKey::from_p256)
164 .map(InnerKeypair::Secp256r1)
165 .map_err(SignatureError::from_source),
166
167 #[cfg(feature = "secp256k1")]
168 (
169 k256::elliptic_curve::ALGORITHM_OID,
170 Some(<k256::Secp256k1 as pkcs8::AssociatedOid>::OID),
171 ) => private_key
172 .try_into()
173 .map(crate::secp256k1::Secp256k1PrivateKey::from_k256)
174 .map(InnerKeypair::Secp256k1)
175 .map_err(SignatureError::from_source),
176
177 _ => Err(SignatureError::from_source(
178 "unsupported or invalid private key type",
179 )),
180 }
181 .map(|inner| Self { inner })
182 }
183
184 #[cfg(feature = "pem")]
185 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
186 pub fn to_der(&self) -> Result<Vec<u8>, SignatureError> {
188 match &self.inner {
189 #[cfg(feature = "ed25519")]
190 InnerKeypair::Ed25519(private_key) => private_key.to_der(),
191 #[cfg(feature = "secp256k1")]
192 InnerKeypair::Secp256k1(private_key) => private_key.to_der(),
193 #[cfg(feature = "secp256r1")]
194 InnerKeypair::Secp256r1(private_key) => private_key.to_der(),
195 }
196 }
197
198 #[cfg(feature = "pem")]
199 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
200 pub fn from_pem(s: &str) -> Result<Self, SignatureError> {
202 use pkcs8::der::pem::PemLabel;
203
204 let (label, doc) =
205 pkcs8::SecretDocument::from_pem(s).map_err(SignatureError::from_source)?;
206 pkcs8::PrivateKeyInfo::validate_pem_label(label)
207 .map_err(SignatureError::from_source)?;
208 Self::from_der(doc.as_bytes())
209 }
210
211 #[cfg(feature = "pem")]
212 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
213 pub fn to_pem(&self) -> Result<String, SignatureError> {
215 match &self.inner {
216 #[cfg(feature = "ed25519")]
217 InnerKeypair::Ed25519(private_key) => private_key.to_pem(),
218 #[cfg(feature = "secp256k1")]
219 InnerKeypair::Secp256k1(private_key) => private_key.to_pem(),
220 #[cfg(feature = "secp256r1")]
221 InnerKeypair::Secp256r1(private_key) => private_key.to_pem(),
222 }
223 }
224 }
225
226 impl Signer<SimpleSignature> for SimpleKeypair {
227 fn try_sign(&self, message: &[u8]) -> Result<SimpleSignature, SignatureError> {
228 match &self.inner {
229 #[cfg(feature = "ed25519")]
230 InnerKeypair::Ed25519(private_key) => private_key.try_sign(message),
231 #[cfg(feature = "secp256k1")]
232 InnerKeypair::Secp256k1(private_key) => private_key.try_sign(message),
233 #[cfg(feature = "secp256r1")]
234 InnerKeypair::Secp256r1(private_key) => private_key.try_sign(message),
235 }
236 }
237 }
238
239 impl Signer<UserSignature> for SimpleKeypair {
240 fn try_sign(&self, msg: &[u8]) -> Result<UserSignature, SignatureError> {
241 <Self as Signer<SimpleSignature>>::try_sign(self, msg).map(UserSignature::Simple)
242 }
243 }
244
245 #[cfg(feature = "ed25519")]
246 #[cfg_attr(doc_cfg, doc(cfg(feature = "ed25519")))]
247 impl From<crate::ed25519::Ed25519PrivateKey> for SimpleKeypair {
248 fn from(private_key: crate::ed25519::Ed25519PrivateKey) -> Self {
249 Self {
250 inner: InnerKeypair::Ed25519(private_key),
251 }
252 }
253 }
254
255 #[cfg(feature = "secp256r1")]
256 #[cfg_attr(doc_cfg, doc(cfg(feature = "secp256r1")))]
257 impl From<crate::secp256r1::Secp256r1PrivateKey> for SimpleKeypair {
258 fn from(private_key: crate::secp256r1::Secp256r1PrivateKey) -> Self {
259 Self {
260 inner: InnerKeypair::Secp256r1(private_key),
261 }
262 }
263 }
264
265 #[cfg(feature = "secp256k1")]
266 #[cfg_attr(doc_cfg, doc(cfg(feature = "secp256k1")))]
267 impl From<crate::secp256k1::Secp256k1PrivateKey> for SimpleKeypair {
268 fn from(private_key: crate::secp256k1::Secp256k1PrivateKey) -> Self {
269 Self {
270 inner: InnerKeypair::Secp256k1(private_key),
271 }
272 }
273 }
274
275 #[derive(Debug, Clone, Eq, PartialEq)]
276 pub struct SimpleVerifiyingKey {
277 inner: InnerVerifyingKey,
278 }
279
280 #[derive(Debug, Clone, Eq, PartialEq)]
281 enum InnerVerifyingKey {
282 #[cfg(feature = "ed25519")]
283 Ed25519(crate::ed25519::Ed25519VerifyingKey),
284 #[cfg(feature = "secp256k1")]
285 Secp256k1(crate::secp256k1::Secp256k1VerifyingKey),
286 #[cfg(feature = "secp256r1")]
287 Secp256r1(crate::secp256r1::Secp256r1VerifyingKey),
288 }
289
290 impl SimpleVerifiyingKey {
291 pub fn scheme(&self) -> SignatureScheme {
292 match &self.inner {
293 #[cfg(feature = "ed25519")]
294 InnerVerifyingKey::Ed25519(verifying_key) => verifying_key.public_key().scheme(),
295 #[cfg(feature = "secp256k1")]
296 InnerVerifyingKey::Secp256k1(verifying_key) => verifying_key.public_key().scheme(),
297 #[cfg(feature = "secp256r1")]
298 InnerVerifyingKey::Secp256r1(verifying_key) => verifying_key.public_key().scheme(),
299 }
300 }
301
302 pub fn public_key(&self) -> MultisigMemberPublicKey {
303 match &self.inner {
304 #[cfg(feature = "ed25519")]
305 InnerVerifyingKey::Ed25519(verifying_key) => {
306 MultisigMemberPublicKey::Ed25519(verifying_key.public_key())
307 }
308 #[cfg(feature = "secp256k1")]
309 InnerVerifyingKey::Secp256k1(verifying_key) => {
310 MultisigMemberPublicKey::Secp256k1(verifying_key.public_key())
311 }
312 #[cfg(feature = "secp256r1")]
313 InnerVerifyingKey::Secp256r1(verifying_key) => {
314 MultisigMemberPublicKey::Secp256r1(verifying_key.public_key())
315 }
316 }
317 }
318
319 #[cfg(feature = "pem")]
320 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
321 pub fn from_der(bytes: &[u8]) -> Result<Self, SignatureError> {
323 let public_key = pkcs8::SubjectPublicKeyInfoRef::try_from(bytes)
324 .map_err(SignatureError::from_source)?;
325
326 match public_key
327 .algorithm
328 .oids()
329 .map_err(SignatureError::from_source)?
330 {
331 #[cfg(feature = "ed25519")]
332 (ed25519_dalek::pkcs8::ALGORITHM_OID, None) => public_key
333 .try_into()
334 .map(crate::ed25519::Ed25519VerifyingKey::from_dalek)
335 .map(InnerVerifyingKey::Ed25519)
336 .map_err(SignatureError::from_source),
337
338 #[cfg(feature = "secp256r1")]
339 (
340 p256::elliptic_curve::ALGORITHM_OID,
341 Some(<p256::NistP256 as pkcs8::AssociatedOid>::OID),
342 ) => public_key
343 .try_into()
344 .map(crate::secp256r1::Secp256r1VerifyingKey::from_p256)
345 .map(InnerVerifyingKey::Secp256r1)
346 .map_err(SignatureError::from_source),
347
348 #[cfg(feature = "secp256k1")]
349 (
350 k256::elliptic_curve::ALGORITHM_OID,
351 Some(<k256::Secp256k1 as pkcs8::AssociatedOid>::OID),
352 ) => public_key
353 .try_into()
354 .map(crate::secp256k1::Secp256k1VerifyingKey::from_k256)
355 .map(InnerVerifyingKey::Secp256k1)
356 .map_err(SignatureError::from_source),
357
358 _ => Err(SignatureError::from_source(
359 "unsupported or invalid public key type",
360 )),
361 }
362 .map(|inner| Self { inner })
363 }
364
365 #[cfg(feature = "pem")]
366 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
367 pub fn to_der(&self) -> Result<Vec<u8>, SignatureError> {
369 match &self.inner {
370 #[cfg(feature = "ed25519")]
371 InnerVerifyingKey::Ed25519(verifying_key) => verifying_key.to_der(),
372 #[cfg(feature = "secp256k1")]
373 InnerVerifyingKey::Secp256k1(verifying_key) => verifying_key.to_der(),
374 #[cfg(feature = "secp256r1")]
375 InnerVerifyingKey::Secp256r1(verifying_key) => verifying_key.to_der(),
376 }
377 }
378
379 #[cfg(feature = "pem")]
380 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
381 pub fn from_pem(s: &str) -> Result<Self, SignatureError> {
383 use pkcs8::der::pem::PemLabel;
384
385 let (label, doc) = pkcs8::Document::from_pem(s).map_err(SignatureError::from_source)?;
386 pkcs8::SubjectPublicKeyInfoRef::validate_pem_label(label)
387 .map_err(SignatureError::from_source)?;
388 Self::from_der(doc.as_bytes())
389 }
390
391 #[cfg(feature = "pem")]
392 #[cfg_attr(doc_cfg, doc(cfg(feature = "pem")))]
393 pub fn to_pem(&self) -> Result<String, SignatureError> {
395 match &self.inner {
396 #[cfg(feature = "ed25519")]
397 InnerVerifyingKey::Ed25519(verifying_key) => verifying_key.to_pem(),
398 #[cfg(feature = "secp256k1")]
399 InnerVerifyingKey::Secp256k1(verifying_key) => verifying_key.to_pem(),
400 #[cfg(feature = "secp256r1")]
401 InnerVerifyingKey::Secp256r1(verifying_key) => verifying_key.to_pem(),
402 }
403 }
404 }
405
406 impl Verifier<SimpleSignature> for SimpleVerifiyingKey {
407 fn verify(
408 &self,
409 message: &[u8],
410 signature: &SimpleSignature,
411 ) -> Result<(), SignatureError> {
412 match &self.inner {
413 #[cfg(feature = "ed25519")]
414 InnerVerifyingKey::Ed25519(verifying_key) => {
415 verifying_key.verify(message, signature)
416 }
417 #[cfg(feature = "secp256k1")]
418 InnerVerifyingKey::Secp256k1(verifying_key) => {
419 verifying_key.verify(message, signature)
420 }
421 #[cfg(feature = "secp256r1")]
422 InnerVerifyingKey::Secp256r1(verifying_key) => {
423 verifying_key.verify(message, signature)
424 }
425 }
426 }
427 }
428
429 impl Verifier<UserSignature> for SimpleVerifiyingKey {
430 fn verify(&self, message: &[u8], signature: &UserSignature) -> Result<(), SignatureError> {
431 let UserSignature::Simple(signature) = signature else {
432 return Err(SignatureError::from_source("not a simple signature"));
433 };
434
435 <Self as Verifier<SimpleSignature>>::verify(self, message, signature)
436 }
437 }
438
439 #[cfg(feature = "ed25519")]
440 #[cfg_attr(doc_cfg, doc(cfg(feature = "ed25519")))]
441 impl From<crate::ed25519::Ed25519VerifyingKey> for SimpleVerifiyingKey {
442 fn from(verifying_key: crate::ed25519::Ed25519VerifyingKey) -> Self {
443 Self {
444 inner: InnerVerifyingKey::Ed25519(verifying_key),
445 }
446 }
447 }
448
449 #[cfg(feature = "secp256r1")]
450 #[cfg_attr(doc_cfg, doc(cfg(feature = "secp256r1")))]
451 impl From<crate::secp256r1::Secp256r1VerifyingKey> for SimpleVerifiyingKey {
452 fn from(verifying_key: crate::secp256r1::Secp256r1VerifyingKey) -> Self {
453 Self {
454 inner: InnerVerifyingKey::Secp256r1(verifying_key),
455 }
456 }
457 }
458
459 #[cfg(feature = "secp256k1")]
460 #[cfg_attr(doc_cfg, doc(cfg(feature = "secp256k1")))]
461 impl From<crate::secp256k1::Secp256k1VerifyingKey> for SimpleVerifiyingKey {
462 fn from(verifying_key: crate::secp256k1::Secp256k1VerifyingKey) -> Self {
463 Self {
464 inner: InnerVerifyingKey::Secp256k1(verifying_key),
465 }
466 }
467 }
468}
469
470#[cfg(test)]
471mod test {
472 use super::*;
473 use crate::ed25519::Ed25519PrivateKey;
474 use crate::ed25519::Ed25519VerifyingKey;
475 use crate::secp256k1::Secp256k1PrivateKey;
476 use crate::secp256k1::Secp256k1VerifyingKey;
477 use crate::secp256r1::Secp256r1PrivateKey;
478 use crate::secp256r1::Secp256r1VerifyingKey;
479 use test_strategy::proptest;
480
481 #[cfg(target_arch = "wasm32")]
482 use wasm_bindgen_test::wasm_bindgen_test as test;
483
484 #[proptest]
485 fn ed25519_pem_der(signer: Ed25519PrivateKey) {
486 let public_key = signer.public_key();
490 let ed25519_der = signer.to_der().unwrap();
491 let ed25519_pem = signer.to_pem().unwrap();
492
493 let from_der = Ed25519PrivateKey::from_der(&ed25519_der).unwrap();
495 assert_eq!(from_der.public_key(), public_key);
496 let from_pem = Ed25519PrivateKey::from_pem(&ed25519_pem).unwrap();
497 assert_eq!(from_pem.public_key(), public_key);
498
499 Secp256r1PrivateKey::from_der(&ed25519_der).unwrap_err();
501 Secp256r1PrivateKey::from_pem(&ed25519_pem).unwrap_err();
502 Secp256k1PrivateKey::from_der(&ed25519_der).unwrap_err();
503 Secp256k1PrivateKey::from_pem(&ed25519_pem).unwrap_err();
504
505 let keypair_from_der = SimpleKeypair::from_der(&ed25519_der).unwrap();
507 assert_eq!(ed25519_der, keypair_from_der.to_der().unwrap());
508 let keypair_from_pem = SimpleKeypair::from_pem(&ed25519_pem).unwrap();
509 assert_eq!(ed25519_pem, keypair_from_pem.to_pem().unwrap());
510
511 let verifying_key = signer.verifying_key();
515 let der = verifying_key.to_der().unwrap();
516 let pem = verifying_key.to_pem().unwrap();
517
518 let from_der = Ed25519VerifyingKey::from_der(&der).unwrap();
520 assert_eq!(from_der.public_key(), public_key);
521 let from_pem = Ed25519VerifyingKey::from_pem(&pem).unwrap();
522 assert_eq!(from_pem.public_key(), public_key);
523
524 Secp256r1VerifyingKey::from_der(&der).unwrap_err();
526 Secp256r1VerifyingKey::from_pem(&pem).unwrap_err();
527 Secp256k1VerifyingKey::from_der(&der).unwrap_err();
528 Secp256k1VerifyingKey::from_pem(&pem).unwrap_err();
529
530 let from_der = SimpleVerifiyingKey::from_der(&der).unwrap();
532 assert_eq!(der, from_der.to_der().unwrap());
533 let from_pem = SimpleVerifiyingKey::from_pem(&pem).unwrap();
534 assert_eq!(pem, from_pem.to_pem().unwrap());
535 }
536
537 #[proptest]
538 fn secp256r1_pem_der(signer: Secp256r1PrivateKey) {
539 let public_key = signer.public_key();
543 let secp256r1_der = signer.to_der().unwrap();
544 let secp256r1_pem = signer.to_pem().unwrap();
545
546 let from_der = Secp256r1PrivateKey::from_der(&secp256r1_der).unwrap();
548 assert_eq!(from_der.public_key(), public_key);
549 let from_pem = Secp256r1PrivateKey::from_pem(&secp256r1_pem).unwrap();
550 assert_eq!(from_pem.public_key(), public_key);
551
552 Ed25519PrivateKey::from_der(&secp256r1_der).unwrap_err();
554 Ed25519PrivateKey::from_pem(&secp256r1_pem).unwrap_err();
555 Secp256k1PrivateKey::from_der(&secp256r1_der).unwrap_err();
556 Secp256k1PrivateKey::from_pem(&secp256r1_pem).unwrap_err();
557
558 let keypair_from_der = SimpleKeypair::from_der(&secp256r1_der).unwrap();
560 assert_eq!(secp256r1_der, keypair_from_der.to_der().unwrap());
561 let keypair_from_pem = SimpleKeypair::from_pem(&secp256r1_pem).unwrap();
562 assert_eq!(secp256r1_pem, keypair_from_pem.to_pem().unwrap());
563
564 let verifying_key = signer.verifying_key();
568 let der = verifying_key.to_der().unwrap();
569 let pem = verifying_key.to_pem().unwrap();
570
571 let from_der = Secp256r1VerifyingKey::from_der(&der).unwrap();
573 assert_eq!(from_der.public_key(), public_key);
574 let from_pem = Secp256r1VerifyingKey::from_pem(&pem).unwrap();
575 assert_eq!(from_pem.public_key(), public_key);
576
577 Ed25519VerifyingKey::from_der(&der).unwrap_err();
579 Ed25519VerifyingKey::from_pem(&pem).unwrap_err();
580 Secp256k1VerifyingKey::from_der(&der).unwrap_err();
581 Secp256k1VerifyingKey::from_pem(&pem).unwrap_err();
582
583 let from_der = SimpleVerifiyingKey::from_der(&der).unwrap();
585 assert_eq!(der, from_der.to_der().unwrap());
586 let from_pem = SimpleVerifiyingKey::from_pem(&pem).unwrap();
587 assert_eq!(pem, from_pem.to_pem().unwrap());
588 }
589
590 #[proptest]
591 fn secp256k1_pem_der(signer: Secp256k1PrivateKey) {
592 let public_key = signer.public_key();
596 let secp256k1_der = signer.to_der().unwrap();
597 let secp256k1_pem = signer.to_pem().unwrap();
598
599 let from_der = Secp256k1PrivateKey::from_der(&secp256k1_der).unwrap();
601 assert_eq!(from_der.public_key(), public_key);
602 let from_pem = Secp256k1PrivateKey::from_pem(&secp256k1_pem).unwrap();
603 assert_eq!(from_pem.public_key(), public_key);
604
605 Ed25519PrivateKey::from_der(&secp256k1_der).unwrap_err();
607 Ed25519PrivateKey::from_pem(&secp256k1_pem).unwrap_err();
608 Secp256r1PrivateKey::from_der(&secp256k1_der).unwrap_err();
609 Secp256r1PrivateKey::from_pem(&secp256k1_pem).unwrap_err();
610
611 let keypair_from_der = SimpleKeypair::from_der(&secp256k1_der).unwrap();
613 assert_eq!(secp256k1_der, keypair_from_der.to_der().unwrap());
614 let keypair_from_pem = SimpleKeypair::from_pem(&secp256k1_pem).unwrap();
615 assert_eq!(secp256k1_pem, keypair_from_pem.to_pem().unwrap());
616
617 let verifying_key = signer.verifying_key();
621 let der = verifying_key.to_der().unwrap();
622 let pem = verifying_key.to_pem().unwrap();
623
624 let from_der = Secp256k1VerifyingKey::from_der(&der).unwrap();
626 assert_eq!(from_der.public_key(), public_key);
627 let from_pem = Secp256k1VerifyingKey::from_pem(&pem).unwrap();
628 assert_eq!(from_pem.public_key(), public_key);
629
630 Ed25519VerifyingKey::from_der(&der).unwrap_err();
632 Ed25519VerifyingKey::from_pem(&pem).unwrap_err();
633 Secp256r1VerifyingKey::from_der(&der).unwrap_err();
634 Secp256r1VerifyingKey::from_pem(&pem).unwrap_err();
635
636 let from_der = SimpleVerifiyingKey::from_der(&der).unwrap();
638 assert_eq!(der, from_der.to_der().unwrap());
639 let from_pem = SimpleVerifiyingKey::from_pem(&pem).unwrap();
640 assert_eq!(pem, from_pem.to_pem().unwrap());
641 }
642}