File: spec.t

package info (click to toggle)
libjson-webtoken-perl 0.10-5
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 208 kB
  • sloc: perl: 336; makefile: 2
file content (224 lines) | stat: -rw-r--r-- 10,995 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
use strict;
use warnings;
use lib 'lib';
use Test::More;

use JSON::WebToken;
use Crypt::CBC;
use Crypt::OpenSSL::AES;
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::Bignum;
use Digest::SHA qw(hmac_sha256);

my $input = join q{} => (
    'eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDIiwiaW50IjoiSFMyNTYiLCJpdiI6IkF4W',
    'ThEQ3REYUdsc2JHbGpiM1JvWlEifQ',
    '.',
    'VjBkk22MjrFUMUl8ItbS8CjKjku4HQz4RiHD0eVG4dir-7XbDkPr1q6YtnN1X-av1EKmEnsrb',
    'hSxTvqtY4oEbWKLoEQ7zVm_0BW-rnwxdwrj4QJrhXGnqIL6bC4waZVJqYhVQIahVWSQsCRcS1',
    'oYXA-2GhT6rk91y118DUkhGDsvdK2_hQsNGE6BQVN1i-XwUoz5sM6_0PRQ1FsYnJATMjVZfa4',
    'otHiooZ_KcOlSWIDxhMDqfPOu60--1ej0eZByO7Ar_IZvzPAWqJ9agGFQIVGRZviXhN0WeErq',
    '9fVTcgeSUPsmurRSTYhTrNFLojqPqqk8pI61kn8GmZxA80-RUQ',
    '.',
    '7kLQQst655TUxmDzysjRLXnD-nfLK5EQK7ODAUkwxc0aRb9NOgu0EMJgOR6Vz8eNbaf8six_O',
    'P6BRyUTYrCkH73-inD6Rc-7vc9eC5fcfSM',
    '.',
    'COyXNSm-CdfAL22WIKcoyCgQwb85aLW3ttDkzNj_1Wg',
);

my $plaintext = pack 'C*' => @{ [
    78,  111, 119, 32,  105, 115, 32,  116, 104, 101, 32,  116, 105, 109,
    101, 32,  102, 111, 114, 32,  97,  108, 108, 32,  103, 111, 111, 100,
    32,  109, 101, 110, 32,  116, 111, 32,  99,  111, 109, 101, 32,  116,
    111, 32,  116, 104, 101, 32,  97,  105, 100, 32,  111, 102, 32,  116,
    104, 101, 105, 114, 32,  99,  111, 117, 110, 116, 114, 121, 46
] };

my $iv = pack 'C*' => @{ [
    3, 22, 60, 12, 43, 67, 104, 105, 108, 108, 105, 99, 111, 116, 104, 101
] };

my $cmk = pack 'C*' => @{ [
    4,   211, 31,  197, 84,  157, 252, 254, 11,  100, 157, 250,
    63,  170, 106, 206, 107, 124, 212, 45,  111, 107, 9,   219,
    200, 177, 0,   240, 143, 156, 44,  207
] };

my $rsa = do {
    my $n = pack 'C*' => @{ [
        177, 119, 33, 13, 164, 30, 108, 121, 207, 136, 107,
        242, 12,  224, 19,  226, 198, 134, 17,  71,  173, 75,  42,
        61,  48,  162, 206, 161, 97,  108, 185, 234, 226, 219,
        118, 206, 118, 5,   169, 224, 60,  181, 90,  85,  51,  123,
        6,   224, 4,   122, 29,  230, 151, 12,  244, 127, 121, 25,
        4,   85,  220, 144, 215, 110, 130, 17,  68,  228, 129,
        138, 7,   130, 231, 40,  212, 214, 17,  179, 28,  124,
        151, 178, 207, 20,  14,  154, 222, 113, 176, 24,  198,
        73,  211, 113, 9,   33,  178, 80,  13,  25,  21,  25,  153,
        212, 206, 67,  154, 147, 70,  194, 192, 183, 160, 83,
        98,  236, 175, 85,  23,  97,  75,  199, 177, 73,  145, 50,
        253, 206, 32,  179, 254, 236, 190, 82,  73,  67,  129,
        253, 252, 220, 108, 136, 138, 11,  192, 1,   36,  239,
        228, 55,  81,  113, 17,  25,  140, 63,  239, 146, 3,   172,
        96,  60,  227, 233, 64,  255, 224, 173, 225, 228, 229,
        92,  112, 72,  99,  97,  26,  87,  187, 123, 46,  50,  90,
        202, 117, 73,  10,  153, 47,  224, 178, 163, 77,  48,  46,
        154, 33,  148, 34,  228, 33,  172, 216, 89,  46,  225,
        127, 68,  146, 234, 30,  147, 54,  146, 5,   133, 45,  78,
        254, 85,  55,  75,  213, 86,  194, 218, 215, 163, 189,
        194, 54, 6,  83,  36, 18, 153, 53, 7,   48,  89, 35, 66,
        144, 7,  65, 154, 13, 97, 75,  55, 230, 132, 3,  13,
        239, 71
    ] };
    my $e = pack 'C*' => @{ [1, 0, 1] };
    my $d = pack 'C*' => @{ [
        84,  80, 150, 58,  165, 235, 242, 123, 217, 55, 38,
        154, 36, 181, 221, 156, 211, 215, 100, 164, 90, 88,
        40,  228, 83,  148, 54,  122, 4,   16,  165, 48,  76,  194,
        26,  107, 51,  53,  179, 165, 31,  18,  198, 173, 78,  61,
        56,  97,  252, 158, 140, 80,  63,  25,  223, 156, 36,  203,
        214, 252, 120, 67,  180, 167, 3,   82,  243, 25,  97,  214,
        83,  133, 69,  16,  104, 54,  160, 200, 41,  83,  164, 187,
        70,  153, 111, 234, 242, 158, 175, 28,  198, 48,  211,
        45,  148, 58,  23,  62,  227, 74,  52,  117, 42,  90,  41,
        249, 130, 154, 80,  119, 61,  26,  193, 40,  125, 10,
        152, 174, 227, 225, 205, 32,  62,  66,  6,   163, 100, 99,
        219, 19,  253, 25,  105, 80,  201, 29,  252, 157, 237,
        69,  1,   80,  171, 167, 20,  196, 156, 109, 249, 88,  0,
        3,   152, 38,  165, 72,  87,  6,   152, 71,  156, 214, 16,
        71,  30,  82,  51,  103, 76,  218, 63,  9,   84,  163, 249,
        91,  215, 44,  238, 85,  101, 240, 148, 1,   82,  224, 91,
        135, 105, 127, 84,  171, 181, 152, 210, 183, 126, 24,
        46,  196, 90,  173, 38,  245, 219, 186, 222, 27,  240,
        212, 194, 15,  66,  135, 226, 178, 190, 52,  245, 74,
        65,  224, 81,  100, 85,  25,  204, 165, 203, 187, 175,
        84,  100, 82,  15,  11,  23,  202, 151, 107, 54,  41,  207,
        3,   136, 229, 134, 131, 93,  139, 50,  182, 204, 93,
        130, 89
    ] };

    my $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters(map {
        Crypt::OpenSSL::Bignum->new_from_bin($_);
    } $n, $e, $d);
    $rsa->use_pkcs1_padding;
    $rsa;
};

my $result = pack 'C*' => @{ [
    32,  242, 63,  207, 94,  246, 133, 37,  135, 48,  88,  4,   15,  193,
    6,   244, 51,  58,  132, 133, 212, 255, 163, 90,  59,  80,  200, 152,
    41,  244, 188, 215, 174, 160, 26,  188, 227, 180, 165, 234, 172, 63,
    24,  116, 152, 28,  149, 16,  94,  213, 201, 171, 180, 191, 11,  21,
    149, 172, 143, 54,  194, 58,  206, 201, 164, 28,  107, 155, 75,  101,
    22,  92,  227, 144, 95,  40,  119, 170, 7,   36,  225, 40,  141, 186,
    213, 7,   175, 16,  174, 122, 75,  32,  48,  193, 119, 202, 41,  152,
    210, 190, 68,  57,  119, 4,   197, 74,  7,   242, 239, 170, 204, 73,
    75,  213, 202, 113, 216, 18,  23,  66,  106, 208, 69,  244, 117, 147,
    2,   37,  207, 199, 184, 96,  102, 44,  70,  212, 87,  143, 253, 0,
    166, 59,  41,  115, 217, 80,  165, 87,  38,  5,   9,   184, 202, 68,
    67,  176, 4,   87,  254, 166, 227, 88,  124, 238, 249, 75,  114, 205,
    148, 149, 45,  78,  193, 134, 64,  189, 168, 76,  170, 76,  176, 72,
    148, 77,  215, 159, 146, 55,  189, 213, 85,  253, 135, 200, 59,  247,
    79,  37,  22,  200, 32,  110, 53,  123, 54,  39,  9,   178, 231, 238,
    95,  25,  211, 143, 87,  220, 88,  138, 209, 13,  227, 72,  58,  102,
    164, 136, 241, 14,  14,  45,  32,  77,  44,  244, 162, 239, 150, 248,
    181, 138, 251, 116, 245, 205, 137, 78,  34,  34,  10,  6,   59,  4,
    197, 2,   153, 251
] };

is $rsa->decrypt($rsa->encrypt($cmk)), $cmk;
is $rsa->decrypt($result), $cmk;

my $cek = pack 'C*' => @{ [
    249, 255, 87, 218, 224, 223, 221, 53, 204, 121, 166, 130, 195, 184,
    50, 69
] };

my $cik = pack 'C*' => @{ [
    218, 209, 130, 50,  169, 45,  70,  214, 29,  187, 123, 20,
    3,   158, 111, 122, 182, 94,  57,  133, 245, 76,  97,  44,
    193, 80,  81,  246, 115, 177, 225, 159
] };

my $ciphertext = pack 'C*' => @{ [
    253, 159, 221, 142, 82,  40,  11,  131, 3,   72,  34,  162, 173, 229,
    146, 217, 183, 173, 139, 132, 58,  137, 33,  182, 82,  49,  110, 141,
    11,  221, 207, 239, 207, 65,  213, 28,  20,  217, 14,  186, 87,  160,
    15,  160, 96,  142, 7,   69,  46,  55,  129, 224, 113, 206, 59,  181,
    7,   188, 255, 15,  16,  59,  180, 107, 75,  0,   217, 175, 254, 8,
    141, 48,  217, 132, 16,  217, 4,   30,  223, 147
] };

my $cbc = Crypt::CBC->new({
    literal_key => 1,
    header      => 'none',
    key         => $cek,
    keysize     => 128 / 8,
    iv          => $iv,
    cipher      => 'Crypt::OpenSSL::AES',
});
my $expects_plaintext = $cbc->decrypt($ciphertext);
is $plaintext, $expects_plaintext;

my $signing_body = pack 'C*' => @{ [
    101, 121, 74,  104, 98,  71,  99,  105, 79,  105, 74,  83,  85,  48,
    69,  120, 88,  122, 85,  105, 76,  67,  74,  108, 98,  109, 77,  105,
    79,  105, 74,  66,  77,  84,  73,  52,  81,  48,  74,  68,  73,  105,
    119, 105, 97,  87,  53,  48,  73,  106, 111, 105, 83,  70,  77,  121,
    78,  84,  89,  105, 76,  67,  74,  112, 100, 105, 73,  54,  73,  107,
    70,  52,  87,  84,  104, 69,  81,  51,  82,  69,  89,  85,  100, 115,
    99,  50,  74,  72,  98,  71,  112, 105, 77,  49,  74,  118, 87,  108,
    69,  105, 102, 81,  46,  73,  80,  73,  95,  122, 49,  55,  50,  104,
    83,  87,  72,  77,  70,  103, 69,  68,  56,  69,  71,  57,  68,  77,
    54,  104, 73,  88,  85,  95,  54,  78,  97,  79,  49,  68,  73,  109,
    67,  110, 48,  118, 78,  101, 117, 111, 66,  113, 56,  52,  55,  83,
    108, 54,  113, 119, 95,  71,  72,  83,  89,  72,  74,  85,  81,  88,
    116, 88,  74,  113, 55,  83,  95,  67,  120, 87,  86,  114, 73,  56,
    50,  119, 106, 114, 79,  121, 97,  81,  99,  97,  53,  116, 76,  90,
    82,  90,  99,  52,  53,  66,  102, 75,  72,  101, 113, 66,  121, 84,
    104, 75,  73,  50,  54,  49,  81,  101, 118, 69,  75,  53,  54,  83,
    121, 65,  119, 119, 88,  102, 75,  75,  90,  106, 83,  118, 107, 81,
    53,  100, 119, 84,  70,  83,  103, 102, 121, 55,  54,  114, 77,  83,
    85,  118, 86,  121, 110, 72,  89,  69,  104, 100, 67,  97,  116, 66,
    70,  57,  72,  87,  84,  65,  105, 88,  80,  120, 55,  104, 103, 90,
    105, 120, 71,  49,  70,  101, 80,  95,  81,  67,  109, 79,  121, 108,
    122, 50,  86,  67,  108, 86,  121, 89,  70,  67,  98,  106, 75,  82,
    69,  79,  119, 66,  70,  102, 45,  112, 117, 78,  89,  102, 79,  55,
    53,  83,  51,  76,  78,  108, 74,  85,  116, 84,  115, 71,  71,  81,
    76,  50,  111, 84,  75,  112, 77,  115, 69,  105, 85,  84,  100, 101,
    102, 107, 106, 101, 57,  49,  86,  88,  57,  104, 56,  103, 55,  57,
    48,  56,  108, 70,  115, 103, 103, 98,  106, 86,  55,  78,  105, 99,
    74,  115, 117, 102, 117, 88,  120, 110, 84,  106, 49,  102, 99,  87,
    73,  114, 82,  68,  101, 78,  73,  79,  109, 97,  107, 105, 80,  69,
    79,  68,  105, 48,  103, 84,  83,  122, 48,  111, 117, 45,  87,  45,
    76,  87,  75,  45,  51,  84,  49,  122, 89,  108, 79,  73,  105, 73,
    75,  66,  106, 115, 69,  120, 81,  75,  90,  45,  119, 46,  95,  90,
    95,  100, 106, 108, 73,  111, 67,  52,  77,  68,  83,  67,  75,  105,
    114, 101, 87,  83,  50,  98,  101, 116, 105, 52,  81,  54,  105, 83,
    71,  50,  85,  106, 70,  117, 106, 81,  118, 100, 122, 45,  95,  80,
    81,  100, 85,  99,  70,  78,  107, 79,  117, 108, 101, 103, 68,  54,
    66,  103, 106, 103, 100, 70,  76,  106, 101, 66,  52,  72,  72,  79,
    79,  55,  85,  72,  118, 80,  56,  80,  69,  68,  117, 48,  97,  48,
    115, 65,  50,  97,  95,  45,  67,  73,  48,  119, 50,  89,  81,  81,
    50,  81,  81,  101, 51,  53,  77
] };

my $integrity = pack 'C*' => @{ [
    115, 141, 100, 225, 62,  30,  2,  0,   130, 183, 173, 230,
    241, 147, 102, 136, 232, 167, 49, 200, 133, 23,  42,  78,
    22,  155, 226, 119, 184, 186, 15, 73
] };

my $expects_integrity = hmac_sha256 $signing_body, $cik;
is $integrity, $expects_integrity;


done_testing;

# IPI_z172hSWHMFgED8EG9DM6hIXU_6NaO1DImCn0vNeuoBq847Sl6qw_GHSYHJUQ
# XtXJq7S_CxWVrI82wjrOyaQca5tLZRZc45BfKHeqByThKI261QevEK56SyAwwXfK
# KZjSvkQ5dwTFSgfy76rMSUvVynHYEhdCatBF9HWTAiXPx7hgZixG1FeP_QCmOylz
# 2VClVyYFCbjKREOwBFf-puNYfO75S3LNlJUtTsGGQL2oTKpMsEiUTdefkje91VX9
# h8g7908lFsggbjV7NicJsufuXxnTj1fcWIrRDeNIOmakiPEODi0gTSz0ou-W-LWK
# -3T1zYlOIiIKBjsExQKZ-w
#