Skip Menu |

This queue is for tickets about the Crypt-OpenSSL-PKCS10 CPAN distribution.

Report information
The Basics
Id: 106313
Status: new
Priority: 0/
Queue: Crypt-OpenSSL-PKCS10

People
Owner: Nobody in particular
Requestors: DDICK [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: 0.15
Fixed in: (no value)



Subject: PATCH: Support for reading a PKCS10 file in DER format
Hi Ionut, Thanks for applying my last patch. This one adds support for reading DER encoded files in the new_from_file method. I copied the interface style from the Crypt-OpenSSL-X509 module. Cheers Dave
Subject: pkcs10_new_from_file_format.patch
diff -Naur old/MANIFEST new/MANIFEST --- old/MANIFEST 2013-08-21 16:53:03.000000000 +1000 +++ new/MANIFEST 2015-08-09 16:48:34.387844267 +1000 @@ -7,6 +7,7 @@ README t/Mytest.t t/CSR.csr +t/CSR.der PKCS10.pm META.yml Module meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) diff -Naur old/PKCS10.pm new/PKCS10.pm --- old/PKCS10.pm 2015-08-08 16:11:32.000000000 +1000 +++ new/PKCS10.pm 2015-08-09 16:50:13.498523190 +1000 @@ -92,6 +92,12 @@ my $req = Crypt::OpenSSL::PKCS10->new_from_file("CSR.csr"); +Can also specify the format of the PKCS10 file, either DER or PEM format. Here are some examples: + + my $req = Crypt::OpenSSL::PKCS10->new_from_file("CSR.csr", Crypt::OpenSSL::PKCS10::FORMAT_PEM()); + + my $req = Crypt::OpenSSL::PKCS10->new_from_file("CSR.der", Crypt::OpenSSL::PKCS10::FORMAT_ASN1()); + =back =head1 Instance Methods diff -Naur old/PKCS10.xs new/PKCS10.xs --- old/PKCS10.xs 2015-08-08 16:11:32.000000000 +1000 +++ new/PKCS10.xs 2015-08-09 16:48:22.469048278 +1000 @@ -32,6 +32,9 @@ if (New(0, p_var, p_size, p_type) == NULL) \ { PACKAGE_CROAK("unable to alloc buffer"); } +#define FORMAT_ASN1 1 +#define FORMAT_PEM 3 + //int add_ext_raw(STACK_OF(X509_REQUEST) *sk, int nid, unsigned char *value, int length); //int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value); X509_NAME *parse_name(char *str, long chtype, int multirdn); @@ -312,6 +315,8 @@ {"NID_netscape_comment", NID_netscape_comment}, {"NID_ext_key_usage", NID_ext_key_usage}, {"NID_subject_key_identifier", NID_subject_key_identifier}, + {"FORMAT_ASN1", FORMAT_ASN1}, + {"FORMAT_PEM", FORMAT_PEM}, {Nullch,0}}; char *name; @@ -669,9 +674,10 @@ RETVAL SV* -new_from_file(class, filename_SV) +new_from_file(class, filename_SV, format = FORMAT_PEM) SV* class; SV* filename_SV; + int format; PREINIT: unsigned char* filename; @@ -682,7 +688,11 @@ CODE: filename = SvPV(filename_SV, filename_length); fp = fopen(filename, "r"); - req = PEM_read_X509_REQ (fp, NULL, NULL, NULL); + if (format == FORMAT_ASN1) + req = d2i_X509_REQ_fp (fp, NULL); + else + req = PEM_read_X509_REQ (fp, NULL, NULL, NULL); + fclose(fp); RETVAL = make_pkcs10_obj(class, req, NULL, NULL, NULL); diff -Naur old/t/CSR.der new/t/CSR.der --- old/t/CSR.der 1970-01-01 10:00:00.000000000 +1000 +++ new/t/CSR.der 2015-08-09 16:42:23.526428029 +1000 @@ -0,0 +1,6 @@ +0‚«0‚“0f1 0 UDE1 0 +U NRW1 0 +U Foo1!0U + Internet Widgits Pty Ltd10U foo.der.bar.com0‚"0  *†H†÷ ‚0‚ +‚Àó(ç&?³ã@0–6£]—z­œåՓ O` Ù6óLàBhq]ó6ÇüwÃ~¡é± sZ¤­užåÔ0=˜’²åÂx{I¯!M™¡™%cY[°/–¸•´¨ AmOÑ»>¤°Ú =…Pü)@®1qUœEË@G°`XF>hF&ûÀåv¡±ÁðGñ_ÿbÁ·’Øóß¿õ$ +C=“BªSã2ºÜø²4˜_,Á]zæˆÞ™ôíŠô½3Å爽>TáÂÁˆÓ8„ûAvh=v#”Gt3¹ ÇÕ҂2LýâüuF—s¥ hÂXî¾}¤ë 0  *†H†÷ ‚ D»BªÄ0[‹sM‚SÍ£6„`ϵlq’ºyèÒ1•Ôå^rü᪱ùe>ŒÃg^îÐe¤:½„ÁbH¨Z·Íø´‚ÔD}iñ÷ƒ×D–ķЫÞy}´ËG¦Ü ›Ž/ÊÀ›‹áp8³ÕØV{G«ð¹WO˜ŽMg|عö§î!ï È Í×´jEHÇP© Žž¾›šA©V…¡¿Fɳ–i&bMèËUSÓbÈ}I—kTÒ?z¶úëÕDÄvUmtÑþRÈñFÒñ~Èð §´‘Ú»üÎԍ”ôùßñ⏰Ɲ¨¡^„½þsí²-3öT8 Ãsó]‚-ݯE \ No newline at end of file diff -Naur old/t/Mytest.t new/t/Mytest.t --- old/t/Mytest.t 2015-08-08 16:11:32.000000000 +1000 +++ new/t/Mytest.t 2015-08-09 16:47:49.126675485 +1000 @@ -5,7 +5,7 @@ # change 'tests => 1' to 'tests => last_test_to_print'; -use Test::More tests => 6; +use Test::More tests => 8; BEGIN { use_ok('Crypt::OpenSSL::PKCS10') }; ######################### @@ -58,6 +58,24 @@ print STDERR $req->subject()."\n"; print STDERR $req->keyinfo()."\n"; print STDERR $req->pubkey_type()."\n"; +print STDERR $req->get_pem_pubkey()."\n"; +ok($req); +} + +{ +my $req = Crypt::OpenSSL::PKCS10->new_from_file("t/CSR.csr", Crypt::OpenSSL::PKCS10::FORMAT_PEM()); +print STDERR $req->subject()."\n"; +print STDERR $req->keyinfo()."\n"; +print STDERR $req->pubkey_type()."\n"; +print STDERR $req->get_pem_pubkey()."\n"; +ok($req); +} + +{ +my $req = Crypt::OpenSSL::PKCS10->new_from_file("t/CSR.der", Crypt::OpenSSL::PKCS10::FORMAT_ASN1()); +print STDERR $req->subject()."\n"; +print STDERR $req->keyinfo()."\n"; +print STDERR $req->pubkey_type()."\n"; print STDERR $req->get_pem_pubkey()."\n"; ok($req); }