1use strict;
2use warnings;
3
4# Core modules
5use Test::More tests => 7;
6use Test::Exception;
7use MIME::Base64;
8
9use utf8;
10use English;
11
12BEGIN { use_ok "OpenXPKI::Crypt::PKCS10" }
13
14my $csr = "-----BEGIN CERTIFICATE REQUEST-----
15MIIC2TCCAcECAQAwgZMxEzARBgoJkiaJk/IsZAEZFgNvcmcxGDAWBgoJkiaJk/Is
16ZAEZFghPcGVuWFBLSTEfMB0GCgmSJomT8ixkARkWD1Rlc3QgRGVwbG95bWVudDEY
17MBYGCgmSJomT8ixkARkWCEdhcmRlbmVyMScwEAYDVQQDDAlTeWx0ZXTDuHkwEwYK
18CZImiZPyLGQBAQwFTW9sdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
19AQDeDsHKkzDYlv7BG8+J2ysFHXnJuLcX29Vf0noITOoP4hQYOJb8L7CocFmijknZ
202UxRqsADrUmhWiye9EieykuhvNC36VVzEcB5EuboYHPyVKgQhI3dA7XqvE1+U8Gs
21pvVufNP9Fe0tWRLleO+4Hl3e31QheaG0B9+AXo78vUYGNdEQFkWZxeWEdMuY/n+L
22MojnJzKhBYc/R1f+gSNDJHzPDA1mecCGyRl+Hz/5vEXdBfMY4KQUNQBmrt9tuD2X
23Hg8z0HEFRHAugR90hFf+KMBWPrTBZ5QpxQ6raXfDbjEeiBm1O05KYr0Fwk1xDnov
24zTPnTPFmbob+i9anynOrkFAHAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAKxYM
25YyiGoQ14rBbvm+x+c7ijdfF5dcClDQHw5icmg+Kd9qeQtF9Yvcgn6wjlpeJC0XXD
26tq3q5Fb/vAbfyqK3Q056M/CGojGcmWKHKtZsvGD3uFMkKaTy9DZ4BQqAbPHz6S3R
2735mbPC1j0CTj0HkKjzlsDB/RJk0fVwdP9equfzqFYV3aRXEa1JSSPgCkDcymm+Bf
28HxU5jx0BojRJPVB1pgTwjR3SHp0GZIblixHjkV7/ZXeXzuQtX/XCChMWFpqpjEpR
29Uc2JuR8ecxfLzS6Iz/njfO9qcfHoZXPW5sXputFAH1UBxYeuUwpEVKioqoGRZ2Jr
30X/jkJOJJjNm9VQ9+Zg==
31-----END CERTIFICATE REQUEST-----";
32
33my $pkcs10;
34
35lives_and { $pkcs10 = OpenXPKI::Crypt::PKCS10->new($csr); ok $pkcs10 } "new instance";
36
37is $pkcs10->get_subject_key_id, "51:8B:77:CE:BD:AE:64:4D:7D:5E:56:33:04:07:1A:9A:89:F8:EE:BE", "Subject Key ID";
38is $pkcs10->get_subject, "UID=Molte,CN=Syltetøy,DC=Gardener,DC=Test Deployment,DC=OpenXPKI,DC=org", "Subject";
39is $pkcs10->get_transaction_id, "c8a70ecaa1882ae6ac57bff0e4fb9d44d5b75911", "Transaction ID";
40is $pkcs10->get_digest, "1c3fa3b3781d63ddfca4f5264e2a9ac0d882efb7", "Digest";
41
42my $csr_identifier = $pkcs10->get_csr_identifier;
43$csr_identifier =~ tr/-_/+\//;
44my @hex_bytes = unpack("(A2)*", $pkcs10->get_transaction_id);
45is pack('H2' x 20, @hex_bytes), decode_base64($csr_identifier), "decoded Transaction ID == decoded CSR Identifier";
46
47# check performance
48if ($ENV{TEST_VERBOSE}) {
49    note "TEST_VERBOSE detected: starting performance test";
50    my $items = 1000;
51    my $begin = [ Time::HiRes::gettimeofday() ];
52    for (my $i=0; $i<$items; $i++) {
53        eval { $pkcs10 = OpenXPKI::Crypt::PKCS10->new($csr) };
54        if ($EVAL_ERROR) {
55            if (my $exc = OpenXPKI::Exception->caught) {
56                diag "OpenXPKI::Exception => ".$exc->as_string."\n";
57            } else {
58                diag "Error: ${EVAL_ERROR}\n";
59            }
60        }
61    }
62
63    my $time_spent = Time::HiRes::tv_interval( $begin, [Time::HiRes::gettimeofday()]);
64    my $csr_per_s = int($items / $time_spent);
65    note "- $csr_per_s CSRs/second (minimum should be 100 per second)";
66}
67
681;
69