Skip to content

Commit 88a3a69

Browse files
committed
rsa: improve coverage of de-/serialisation methods
* Serialise the test key in several different formats * Compare serialisation output directly against known good (to prevent regressions) * Rename the test keys to have a consistent naming scheme * Add more deserialisation tests covering different input formats
1 parent 3c27685 commit 88a3a69

File tree

11 files changed

+138
-42
lines changed

11 files changed

+138
-42
lines changed

openssl/src/cipher_ctx.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ mod test {
735735
#[cfg(not(any(boringssl, awslc)))]
736736
fn seal_open() {
737737
let private_pem = include_bytes!("../test/rsa.pem");
738-
let public_pem = include_bytes!("../test/rsa.pem.pub");
738+
let public_pem = include_bytes!("../test/rsa.pub.pem");
739739
let private_key = PKey::private_key_from_pem(private_pem).unwrap();
740740
let public_key = PKey::public_key_from_pem(public_pem).unwrap();
741741
let cipher = Cipher::aes_256_cbc();

openssl/src/envelope.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ mod test {
158158
#[test]
159159
fn public_encrypt_private_decrypt() {
160160
let private_pem = include_bytes!("../test/rsa.pem");
161-
let public_pem = include_bytes!("../test/rsa.pem.pub");
161+
let public_pem = include_bytes!("../test/rsa.pub.pem");
162162
let private_key = PKey::private_key_from_pem(private_pem).unwrap();
163163
let public_key = PKey::public_key_from_pem(public_pem).unwrap();
164164
let cipher = Cipher::aes_256_cbc();

openssl/src/rsa.rs

Lines changed: 73 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -683,17 +683,37 @@ cfg_if! {
683683
#[cfg(test)]
684684
mod test {
685685
use crate::symm::Cipher;
686+
use std::str::from_utf8;
686687

687688
use super::*;
688689

689690
#[test]
690-
fn test_from_password() {
691+
fn test_private_key_from_pem() {
692+
Rsa::private_key_from_pem(include_bytes!("../test/rsa.pem")).unwrap();
693+
}
694+
695+
#[test]
696+
fn test_private_key_from_pem_pkcs1() {
697+
Rsa::private_key_from_pem(include_bytes!("../test/rsa.pkcs1.pem")).unwrap();
698+
}
699+
#[test]
700+
fn test_private_key_from_der() {
701+
Rsa::private_key_from_der(include_bytes!("../test/rsa.der")).unwrap();
702+
}
703+
704+
#[test]
705+
fn test_private_key_from_der_pkcs1() {
706+
Rsa::private_key_from_der(include_bytes!("../test/rsa.pkcs1.der")).unwrap();
707+
}
708+
709+
#[test]
710+
fn test_private_key_from_pem_password() {
691711
let key = include_bytes!("../test/rsa-encrypted.pem");
692712
Rsa::private_key_from_pem_passphrase(key, b"mypass").unwrap();
693713
}
694714

695715
#[test]
696-
fn test_from_password_callback() {
716+
fn test_private_key_from_pem_callback() {
697717
let mut password_queried = false;
698718
let key = include_bytes!("../test/rsa-encrypted.pem");
699719
Rsa::private_key_from_pem_callback(key, |password| {
@@ -707,18 +727,35 @@ mod test {
707727
}
708728

709729
#[test]
710-
fn test_to_password() {
711-
let key = Rsa::generate(2048).unwrap();
730+
fn test_private_key_to_pem() {
731+
let key = Rsa::private_key_from_der(include_bytes!("../test/rsa.der")).unwrap();
732+
let pem = key.private_key_to_pem().unwrap();
733+
assert_eq!(
734+
from_utf8(&pem).unwrap(),
735+
include_str!("../test/rsa.pkcs1.pem").replace("\r\n", "\n")
736+
);
737+
}
738+
739+
#[test]
740+
fn test_private_key_to_pem_password() {
741+
let key = Rsa::private_key_from_der(include_bytes!("../test/rsa.der")).unwrap();
712742
let pem = key
713743
.private_key_to_pem_passphrase(Cipher::aes_128_cbc(), b"foobar")
714744
.unwrap();
715745
Rsa::private_key_from_pem_passphrase(&pem, b"foobar").unwrap();
716746
assert!(Rsa::private_key_from_pem_passphrase(&pem, b"fizzbuzz").is_err());
717747
}
718748

749+
#[test]
750+
fn test_private_key_to_der_pkcs1() {
751+
let key = super::Rsa::private_key_from_pem(include_bytes!("../test/rsa.pem")).unwrap();
752+
let der = key.private_key_to_der().unwrap();
753+
assert_eq!(der, include_bytes!("../test/rsa.pkcs1.der"));
754+
}
755+
719756
#[test]
720757
fn test_public_encrypt_private_decrypt_with_padding() {
721-
let key = include_bytes!("../test/rsa.pem.pub");
758+
let key = include_bytes!("../test/rsa.pub.pem");
722759
let public_key = Rsa::public_key_from_pem(key).unwrap();
723760

724761
let mut result = vec![0; public_key.size() as usize];
@@ -780,25 +817,48 @@ mod test {
780817
}
781818

782819
#[test]
783-
#[should_panic]
784820
fn test_public_key_from_pem_pkcs1_file_panic() {
785821
let key = include_bytes!("../test/key.pem.pub");
786-
Rsa::public_key_from_pem_pkcs1(key).unwrap();
822+
assert!(Rsa::public_key_from_pem_pkcs1(key).is_err());
787823
}
788824

789825
#[test]
790826
fn test_public_key_to_pem_pkcs1() {
791-
let keypair = super::Rsa::generate(512).unwrap();
827+
let keypair = super::Rsa::private_key_from_der(include_bytes!("../test/rsa.der")).unwrap();
792828
let pubkey_pem = keypair.public_key_to_pem_pkcs1().unwrap();
793-
super::Rsa::public_key_from_pem_pkcs1(&pubkey_pem).unwrap();
829+
assert_eq!(
830+
from_utf8(&pubkey_pem).unwrap(),
831+
include_str!("../test/rsa.pub.pkcs1.pem").replace("\r\n", "\n")
832+
);
794833
}
795834

796835
#[test]
797-
#[should_panic]
798-
fn test_public_key_from_pem_pkcs1_generate_panic() {
799-
let keypair = super::Rsa::generate(512).unwrap();
836+
fn test_public_key_to_pem() {
837+
let keypair = super::Rsa::private_key_from_der(include_bytes!("../test/rsa.der")).unwrap();
800838
let pubkey_pem = keypair.public_key_to_pem().unwrap();
801-
super::Rsa::public_key_from_pem_pkcs1(&pubkey_pem).unwrap();
839+
assert_eq!(
840+
from_utf8(&pubkey_pem).unwrap(),
841+
include_str!("../test/rsa.pub.pem").replace("\r\n", "\n")
842+
);
843+
}
844+
845+
#[test]
846+
fn test_public_key_to_der() {
847+
let keypair = super::Rsa::private_key_from_pem(include_bytes!("../test/rsa.pem")).unwrap();
848+
let pubkey_der = keypair.public_key_to_der().unwrap();
849+
assert_eq!(pubkey_der, include_bytes!("../test/rsa.pub.der"));
850+
}
851+
852+
#[test]
853+
fn test_public_key_to_der_pkcs1() {
854+
let keypair = super::Rsa::private_key_from_pem(include_bytes!("../test/rsa.pem")).unwrap();
855+
let pubkey_der = keypair.public_key_to_der_pkcs1().unwrap();
856+
assert_eq!(pubkey_der, include_bytes!("../test/rsa.pub.pkcs1.der"));
857+
}
858+
859+
#[test]
860+
fn test_public_key_from_pem_pkcs1_generate_panic() {
861+
assert!(Rsa::public_key_from_der_pkcs1(include_bytes!("../test/rsa.pub.der")).is_err());
802862
}
803863

804864
#[test]

openssl/test/rsa.der

1.16 KB
Binary file not shown.

openssl/test/rsa.pem

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
-----BEGIN RSA PRIVATE KEY-----
2-
MIIEowIBAAKCAQEAofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd/wWJcyQoTbji9k0
3-
l8W26mPddxHmfHQp+Vaw+4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL+yRT+SFd2lZS+pC
4-
gNMsD1W/YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb/7OMg0LOL+bSf63kpaSHSX
5-
ndS5z5rexMdbBYUsLA9e+KXBdQOS+UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uD
6-
Zlxvb3qCo5ZwKh9kG4LT6/I5IhlJH7aGhyxXFvUK+DWNmoudF8NAco9/h9iaGNj8
7-
q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQIDAQABAoIBABKucaRpzQorw35S
8-
bEUAVx8dYXUdZOlJcHtiWQ+dC6V8ljxAHj/PLyzTveyI5QO/xkObCyjIL303l2cf
9-
UhPu2MFaJdjVzqACXuOrLot/eSFvxjvqVidTtAZExqFRJ9mylUVAoLvhowVWmC1O
10-
n95fZCXxTUtxNEG1Xcc7m0rtzJKs45J+N/V9DP1edYH6USyPSWGp6wuA+KgHRnKK
11-
Vf9GRx80JQY7nVNkL17eHoTWEwga+lwi0FEoW9Y7lDtWXYmKBWhUE+U8PGxlJf8f
12-
40493HDw1WRQ/aSLoS4QTp3rn7gYgeHEvfJdkkf0UMhlknlo53M09EFPdadQ4TlU
13-
bjqKc50CgYEA4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH/5IB3jw3bcxGn6QLvnE
14-
tfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw/Py5PJdTJNPY8cQn7ouZ2KKDcmnPG
15-
BY5t7yLc1QlQ5xHdwW1VhvKn+nXqhJTBgIPgtldC+KDV5z+y2XDwGUcCgYEAuQPE
16-
fgmVtjL0Uyyx88GZFF1fOunH3+7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYs
17-
p1ZSe7zFYHj7C6ul7TjeLQeZD/YwD66t62wDmpe/HlB+TnBA+njbglfIsRLtXlnD
18-
zQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdcCgYAHAp9XcCSrn8wVkMVkKdb7
19-
DOX4IKjzdahm+ctDAJN4O/y7OW5FKebvUjdAIt2GuoTZ71iTG+7F0F+lP88jtjP4
20-
U4qe7VHoewl4MKOfXZKTe+YCS1XbNvfgwJ3Ltyl1OH9hWvu2yza7q+d5PCsDzqtm
21-
27kxuvULVeya+TEdAB1ijQKBgQCH/3r6YrVH/uCWGy6bzV1nGNOdjKc9tmkfOJmN
22-
54dxdixdpozCQ6U4OxZrsj3FcOhHBsqAHvX2uuYjagqvo3cOj1TRqNocX40omfCC
23-
Mx3bD1yPPf/6TI2XECva/ggqEY2mYzmIiA5LVVmc5nrybr+lssFKneeyxN2Wq93S
24-
0iJMdQKBgCGHewxzoa1r8ZMD0LETNrToK423K377UCYqXfg5XMclbrjPbEC3YI1Z
25-
NqMtuhdBJqUnBi6tjKMF+34Xf0CUN8ncuXGO2CAYvO8PdyCixHX52ybaDjy1FtCE
26-
6yUXjoKNXKvUm7MWGsAYH6f4IegOetN5NvmUMFStCSkh7ixZLkN1
27-
-----END RSA PRIVATE KEY-----
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCh+BYK4uPJtGXO
3+
jS1lYmM2K5J9vinh8CR3/BYlzJChNuOL2TSXxbbqY913EeZ8dCn5VrD7io8ImtxL
4+
aYk8wTM/U+3QGbh3hCUv7JFP5IV3aVlL6kKA0ywPVb9ilE8TA5a8bpvfbr3SvaNn
5+
juygxmj3AbONv/s4yDQs4v5tJ/reSlpIdJed1LnPmt7Ex1sFhSwsD174pcF1A5L5
6+
ROjtZMEQxrZHYJqkeDrrnGya11UxMFBji4NmXG9veoKjlnAqH2QbgtPr8jkiGUkf
7+
toaHLFcW9Qr4NY2ai50Xw0Byj3+H2JoY2PyrZ62EWQwuz3WTOTY8BwNNb2BvniHg
8+
VFbK5emhAgMBAAECggEAEq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyW
9+
PEAeP88vLNO97IjlA7/GQ5sLKMgvfTeXZx9SE+7YwVol2NXOoAJe46sui395IW/G
10+
O+pWJ1O0BkTGoVEn2bKVRUCgu+GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzj
11+
kn439X0M/V51gfpRLI9JYanrC4D4qAdGcopV/0ZHHzQlBjudU2QvXt4ehNYTCBr6
12+
XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl/x/jTj3ccPDVZFD9pIuhLhBOneufuBiB
13+
4cS98l2SR/RQyGWSeWjnczT0QU91p1DhOVRuOopznQKBgQDgHMQQ60imZV1URk0K
14+
pLttoLhyt3SmqdEf/kgHePDdtzEafpAu+cS191R2JiuoF2yzWXnwFDcqGigp5BNr
15+
0AHQfD8/Lk8l1Mk09jxxCfui5nYooNyac8YFjm3vItzVCVDnEd3BbVWG8qf6deqE
16+
lMGAg+C2V0L4oNXnP7LZcPAZRwKBgQC5A8R+CZW2MvRTLLHzwZkUXV866cff7tx6
17+
kqa0finGG0KgeqlaZPxgCZnFp7AeAcCMtiynVlJ7vMVgePsLq6XtON4tB5kP9jAP
18+
rq3rbAOal78eUH5OcED6eNuCV8ixEu1eWcPNCS/l1OW1EnXUEoEHKl54Xrrz2uNw
19+
kgMTP1FZ1wKBgAcCn1dwJKufzBWQxWQp1vsM5fggqPN1qGb5y0MAk3g7/Ls5bkUp
20+
5u9SN0Ai3Ya6hNnvWJMb7sXQX6U/zyO2M/hTip7tUeh7CXgwo59dkpN75gJLVds2
21+
9+DAncu3KXU4f2Fa+7bLNrur53k8KwPOq2bbuTG69QtV7Jr5MR0AHWKNAoGBAIf/
22+
evpitUf+4JYbLpvNXWcY052Mpz22aR84mY3nh3F2LF2mjMJDpTg7FmuyPcVw6EcG
23+
yoAe9fa65iNqCq+jdw6PVNGo2hxfjSiZ8IIzHdsPXI89//pMjZcQK9r+CCoRjaZj
24+
OYiIDktVWZzmevJuv6WywUqd57LE3Zar3dLSIkx1AoGAIYd7DHOhrWvxkwPQsRM2
25+
tOgrjbcrfvtQJipd+DlcxyVuuM9sQLdgjVk2oy26F0EmpScGLq2MowX7fhd/QJQ3
26+
ydy5cY7YIBi87w93IKLEdfnbJtoOPLUW0ITrJReOgo1cq9SbsxYawBgfp/gh6A56
27+
03k2+ZQwVK0JKSHuLFkuQ3U=
28+
-----END PRIVATE KEY-----

openssl/test/rsa.pkcs1.der

1.16 KB
Binary file not shown.

openssl/test/rsa.pkcs1.pem

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd/wWJcyQoTbji9k0
3+
l8W26mPddxHmfHQp+Vaw+4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL+yRT+SFd2lZS+pC
4+
gNMsD1W/YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb/7OMg0LOL+bSf63kpaSHSX
5+
ndS5z5rexMdbBYUsLA9e+KXBdQOS+UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uD
6+
Zlxvb3qCo5ZwKh9kG4LT6/I5IhlJH7aGhyxXFvUK+DWNmoudF8NAco9/h9iaGNj8
7+
q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQIDAQABAoIBABKucaRpzQorw35S
8+
bEUAVx8dYXUdZOlJcHtiWQ+dC6V8ljxAHj/PLyzTveyI5QO/xkObCyjIL303l2cf
9+
UhPu2MFaJdjVzqACXuOrLot/eSFvxjvqVidTtAZExqFRJ9mylUVAoLvhowVWmC1O
10+
n95fZCXxTUtxNEG1Xcc7m0rtzJKs45J+N/V9DP1edYH6USyPSWGp6wuA+KgHRnKK
11+
Vf9GRx80JQY7nVNkL17eHoTWEwga+lwi0FEoW9Y7lDtWXYmKBWhUE+U8PGxlJf8f
12+
40493HDw1WRQ/aSLoS4QTp3rn7gYgeHEvfJdkkf0UMhlknlo53M09EFPdadQ4TlU
13+
bjqKc50CgYEA4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH/5IB3jw3bcxGn6QLvnE
14+
tfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw/Py5PJdTJNPY8cQn7ouZ2KKDcmnPG
15+
BY5t7yLc1QlQ5xHdwW1VhvKn+nXqhJTBgIPgtldC+KDV5z+y2XDwGUcCgYEAuQPE
16+
fgmVtjL0Uyyx88GZFF1fOunH3+7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYs
17+
p1ZSe7zFYHj7C6ul7TjeLQeZD/YwD66t62wDmpe/HlB+TnBA+njbglfIsRLtXlnD
18+
zQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdcCgYAHAp9XcCSrn8wVkMVkKdb7
19+
DOX4IKjzdahm+ctDAJN4O/y7OW5FKebvUjdAIt2GuoTZ71iTG+7F0F+lP88jtjP4
20+
U4qe7VHoewl4MKOfXZKTe+YCS1XbNvfgwJ3Ltyl1OH9hWvu2yza7q+d5PCsDzqtm
21+
27kxuvULVeya+TEdAB1ijQKBgQCH/3r6YrVH/uCWGy6bzV1nGNOdjKc9tmkfOJmN
22+
54dxdixdpozCQ6U4OxZrsj3FcOhHBsqAHvX2uuYjagqvo3cOj1TRqNocX40omfCC
23+
Mx3bD1yPPf/6TI2XECva/ggqEY2mYzmIiA5LVVmc5nrybr+lssFKneeyxN2Wq93S
24+
0iJMdQKBgCGHewxzoa1r8ZMD0LETNrToK423K377UCYqXfg5XMclbrjPbEC3YI1Z
25+
NqMtuhdBJqUnBi6tjKMF+34Xf0CUN8ncuXGO2CAYvO8PdyCixHX52ybaDjy1FtCE
26+
6yUXjoKNXKvUm7MWGsAYH6f4IegOetN5NvmUMFStCSkh7ixZLkN1
27+
-----END RSA PRIVATE KEY-----

openssl/test/rsa.pub.der

294 Bytes
Binary file not shown.
File renamed without changes.

openssl/test/rsa.pub.pkcs1.der

270 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)