1
|
OUTPUT TO crypto-test.txt.
|
2
|
|
3
|
RUN CipherTest1(32, 0, "AES_CBC_256", TRUE).
|
4
|
RUN CipherTest1(32, 12, "AES_CBC_256", TRUE).
|
5
|
RUN CipherTest1(32, 13, "AES_CBC_256", TRUE).
|
6
|
RUN CipherTest1(32, 14, "AES_CBC_256", TRUE).
|
7
|
RUN CipherTest1(32, 15, "AES_CBC_256", TRUE).
|
8
|
RUN CipherTest1(32, 16, "AES_CBC_256", TRUE).
|
9
|
RUN CipherTest1(32, 20, "AES_CBC_256", TRUE).
|
10
|
|
11
|
|
12
|
RUN TestAllIV.
|
13
|
|
14
|
OUTPUT CLOSE.
|
15
|
|
16
|
PROCEDURE TestAllIV:
|
17
|
RUN CipherTestIV(24, 8, "DES3_CBC_168").
|
18
|
RUN CipherTestIV(24, 0, "DES3_ECB_168").
|
19
|
RUN CipherTestIV(24, 8, "DES3_CFB_168").
|
20
|
RUN CipherTestIV(24, 8, "DES3_OFB_168").
|
21
|
RUN CipherTestIV(8, 8, "DES_CBC_56").
|
22
|
RUN CipherTestIV(8, 0, "DES_ECB_56").
|
23
|
RUN CipherTestIV(8, 8, "DES_CFB_56").
|
24
|
RUN CipherTestIV(8, 8, "DES_OFB_56").
|
25
|
RUN CipherTestIV(16, 16, "AES_CBC_128").
|
26
|
RUN CipherTestIV(24, 16, "AES_CBC_192").
|
27
|
RUN CipherTestIV(32, 16, "AES_CBC_256").
|
28
|
RUN CipherTestIV(16, 0, "AES_ECB_128").
|
29
|
RUN CipherTestIV(24, 0, "AES_ECB_192").
|
30
|
RUN CipherTestIV(32, 0, "AES_ECB_256").
|
31
|
RUN CipherTestIV(16, 16, "AES_CFB_128").
|
32
|
RUN CipherTestIV(24, 16, "AES_CFB_192").
|
33
|
RUN CipherTestIV(32, 16, "AES_CFB_256").
|
34
|
RUN CipherTestIV(16, 16, "AES_OFB_128").
|
35
|
RUN CipherTestIV(24, 16, "AES_OFB_192").
|
36
|
RUN CipherTestIV(32, 16, "AES_OFB_256").
|
37
|
RUN CipherTestIV(16, 0, "RC4_ECB_128").
|
38
|
END.
|
39
|
|
40
|
PROCEDURE TestAll:
|
41
|
RUN CipherTest(24, 8, "DES3_CBC_168").
|
42
|
RUN CipherTest(24, 0, "DES3_ECB_168").
|
43
|
RUN CipherTest(24, 8, "DES3_CFB_168").
|
44
|
RUN CipherTest(24, 8, "DES3_OFB_168").
|
45
|
RUN CipherTest(8, 8, "DES_CBC_56").
|
46
|
RUN CipherTest(8, 0, "DES_ECB_56").
|
47
|
RUN CipherTest(8, 8, "DES_CFB_56").
|
48
|
RUN CipherTest(8, 8, "DES_OFB_56").
|
49
|
RUN CipherTest(16, 16, "AES_CBC_128").
|
50
|
RUN CipherTest(24, 16, "AES_CBC_192").
|
51
|
RUN CipherTest(32, 16, "AES_CBC_256").
|
52
|
RUN CipherTest(16, 0, "AES_ECB_128").
|
53
|
RUN CipherTest(24, 0, "AES_ECB_192").
|
54
|
RUN CipherTest(32, 0, "AES_ECB_256").
|
55
|
RUN CipherTest(16, 16, "AES_CFB_128").
|
56
|
RUN CipherTest(24, 16, "AES_CFB_192").
|
57
|
RUN CipherTest(32, 16, "AES_CFB_256").
|
58
|
RUN CipherTest(16, 16, "AES_OFB_128").
|
59
|
RUN CipherTest(24, 16, "AES_OFB_192").
|
60
|
RUN CipherTest(32, 16, "AES_OFB_256").
|
61
|
RUN CipherTest(16, 0, "RC4_ECB_128").
|
62
|
END.
|
63
|
|
64
|
PROCEDURE CipherTest:
|
65
|
DEF INPUT PARAMETER key-len AS INTEGER.
|
66
|
DEF INPUT PARAMETER iv-len AS INTEGER.
|
67
|
DEF INPUT PARAMETER alg AS CHAR.
|
68
|
RUN CipherTest1(key-len, iv-len, alg, FALSE).
|
69
|
END.
|
70
|
|
71
|
PROCEDURE CipherTestIV:
|
72
|
DEF INPUT PARAMETER key-len AS INTEGER.
|
73
|
DEF INPUT PARAMETER iv-len AS INTEGER.
|
74
|
DEF INPUT PARAMETER alg AS CHAR.
|
75
|
|
76
|
DEF VAR ivlen AS INTEGER NO-UNDO.
|
77
|
|
78
|
DO ivlen = 0 TO iv-len:
|
79
|
RUN CipherTest1(key-len, ivlen, alg, FALSE).
|
80
|
END.
|
81
|
END.
|
82
|
|
83
|
PROCEDURE CipherTest1:
|
84
|
DEF INPUT PARAMETER key-len AS INTEGER.
|
85
|
DEF INPUT PARAMETER iv-len AS INTEGER.
|
86
|
DEF INPUT PARAMETER alg AS CHAR.
|
87
|
DEF INPUT PARAMETER change-iv AS LOGICAL.
|
88
|
|
89
|
DEF VAR raw-iv AS RAW NO-UNDO.
|
90
|
DEF VAR raw-iv1 AS RAW NO-UNDO.
|
91
|
DEF VAR iv-hex AS CHAR NO-UNDO.
|
92
|
DEF VAR key-hex AS CHAR NO-UNDO.
|
93
|
DEF VAR raw-key AS RAW NO-UNDO.
|
94
|
DEF VAR plain-text AS CHAR NO-UNDO.
|
95
|
DEF VAR cipher-text AS MEMPTR NO-UNDO.
|
96
|
DEF VAR cipher-raw AS RAW NO-UNDO.
|
97
|
DEF VAR cipher-hex AS CHAR NO-UNDO.
|
98
|
DEF VAR decipher-raw AS MEMPTR NO-UNDO.
|
99
|
DEF VAR decipher-text AS LONGCHAR NO-UNDO.
|
100
|
|
101
|
|
102
|
MESSAGE alg key-len iv-len.
|
103
|
|
104
|
plain-text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eius".
|
105
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = alg.
|
106
|
|
107
|
// Cleanup the IV buffer
|
108
|
LENGTH(raw-iv) = 16.
|
109
|
PUT-STRING(raw-iv, 16) = FILL(CHR(0), 16).
|
110
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = raw-iv.
|
111
|
|
112
|
IF iv-len > 0 THEN DO:
|
113
|
LENGTH(raw-iv) = iv-len.
|
114
|
PUT-STRING(raw-iv, 1, iv-len) = SUBSTRING("0123456789abcdefghiklmnopqrstuvwxyz", 1, iv-len).
|
115
|
END.
|
116
|
ELSE
|
117
|
raw-iv = ?.
|
118
|
|
119
|
|
120
|
LENGTH(raw-key) = key-len.
|
121
|
PUT-STRING(raw-key, 1, key-len) = FILL("key", key-len).
|
122
|
|
123
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = raw-iv.
|
124
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-KEY = raw-key.
|
125
|
|
126
|
iv-hex = HEX-ENCODE(SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV).
|
127
|
key-hex = HEX-ENCODE(raw-key).
|
128
|
|
129
|
MESSAGE "key:" key-hex.
|
130
|
MESSAGE "iv:" iv-hex.
|
131
|
|
132
|
cipher-text = ENCRYPT(plain-text).
|
133
|
|
134
|
cipher-raw = GET-BYTES(cipher-text, 1, GET-SIZE(cipher-text)).
|
135
|
cipher-hex = HEX-ENCODE(cipher-raw).
|
136
|
MESSAGE LENGTH(cipher-raw) cipher-hex.
|
137
|
/*
|
138
|
IF change-iv THEN DO:
|
139
|
LENGTH(raw-iv1) = 16.
|
140
|
PUT-STRING(raw-iv1, 16) = FILL(CHR(0), 16).
|
141
|
LENGTH(raw-iv1) = iv-len.
|
142
|
PUT-STRING(raw-iv1, 1, iv-len) = SUBSTRING("0123456789abcdefghiklmnopqrstuvwxyz", 1, iv-len).
|
143
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = raw-iv1.
|
144
|
|
145
|
MESSAGE "IV updated".
|
146
|
iv-hex = HEX-ENCODE(SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV).
|
147
|
MESSAGE "iv:" iv-hex.
|
148
|
END.
|
149
|
*/
|
150
|
decipher-raw = DECRYPT(cipher-text).
|
151
|
COPY-LOB FROM decipher-raw TO decipher-text.
|
152
|
IF plain-text = decipher-text THEN
|
153
|
MESSAGE "OK".
|
154
|
ELSE
|
155
|
MESSAGE "FAIL".
|
156
|
END.
|
157
|
|