1
|
OUTPUT TO crypto-test.txt.
|
2
|
|
3
|
RUN CipherTest1(32, 16, "AES_CBC_256", TRUE).
|
4
|
RUN CipherTest1(32, 20, "AES_CBC_256", TRUE).
|
5
|
RUN CipherTest1(32, 10, "AES_CBC_256", TRUE).
|
6
|
|
7
|
RUN TestAll.
|
8
|
|
9
|
OUTPUT CLOSE.
|
10
|
|
11
|
PROCEDURE TestAll:
|
12
|
RUN CipherTest(24, 8, "DES3_CBC_168").
|
13
|
RUN CipherTest(24, 0, "DES3_ECB_168").
|
14
|
RUN CipherTest(24, 8, "DES3_CFB_168").
|
15
|
RUN CipherTest(24, 8, "DES3_OFB_168").
|
16
|
RUN CipherTest(8, 8, "DES_CBC_56").
|
17
|
RUN CipherTest(8, 0, "DES_ECB_56").
|
18
|
RUN CipherTest(8, 8, "DES_CFB_56").
|
19
|
RUN CipherTest(8, 8, "DES_OFB_56").
|
20
|
RUN CipherTest(16, 16, "AES_CBC_128").
|
21
|
RUN CipherTest(24, 16, "AES_CBC_192").
|
22
|
RUN CipherTest(32, 16, "AES_CBC_256").
|
23
|
RUN CipherTest(16, 0, "AES_ECB_128").
|
24
|
RUN CipherTest(24, 0, "AES_ECB_192").
|
25
|
RUN CipherTest(32, 0, "AES_ECB_256").
|
26
|
RUN CipherTest(16, 16, "AES_CFB_128").
|
27
|
RUN CipherTest(24, 16, "AES_CFB_192").
|
28
|
RUN CipherTest(32, 16, "AES_CFB_256").
|
29
|
RUN CipherTest(16, 16, "AES_OFB_128").
|
30
|
RUN CipherTest(24, 16, "AES_OFB_192").
|
31
|
RUN CipherTest(32, 16, "AES_OFB_256").
|
32
|
RUN CipherTest(16, 0, "RC4_ECB_128").
|
33
|
END.
|
34
|
|
35
|
PROCEDURE CipherTest:
|
36
|
DEF INPUT PARAMETER key-len AS INTEGER.
|
37
|
DEF INPUT PARAMETER iv-len AS INTEGER.
|
38
|
DEF INPUT PARAMETER alg AS CHAR.
|
39
|
RUN CipherTest1(key-len, iv-len, alg, FALSE).
|
40
|
END.
|
41
|
|
42
|
PROCEDURE CipherTest1:
|
43
|
DEF INPUT PARAMETER key-len AS INTEGER.
|
44
|
DEF INPUT PARAMETER iv-len AS INTEGER.
|
45
|
DEF INPUT PARAMETER alg AS CHAR.
|
46
|
DEF INPUT PARAMETER change-iv AS LOGICAL.
|
47
|
|
48
|
DEF VAR raw-iv AS RAW NO-UNDO.
|
49
|
DEF VAR raw-iv1 AS RAW NO-UNDO.
|
50
|
DEF VAR iv-hex AS CHAR NO-UNDO.
|
51
|
DEF VAR raw-key AS RAW NO-UNDO.
|
52
|
DEF VAR plain-text AS CHAR NO-UNDO.
|
53
|
DEF VAR cipher-text AS MEMPTR NO-UNDO.
|
54
|
DEF VAR cipher-raw AS RAW NO-UNDO.
|
55
|
DEF VAR cipher-hex AS CHAR NO-UNDO.
|
56
|
DEF VAR decipher-raw AS MEMPTR NO-UNDO.
|
57
|
DEF VAR decipher-text AS LONGCHAR NO-UNDO.
|
58
|
|
59
|
|
60
|
plain-text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eius".
|
61
|
|
62
|
IF iv-len > 0 THEN DO:
|
63
|
LENGTH(raw-iv) = iv-len.
|
64
|
PUT-STRING(raw-iv, 1, iv-len) = FILL("iv", iv-len).
|
65
|
END.
|
66
|
ELSE
|
67
|
raw-iv = ?.
|
68
|
|
69
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = raw-iv.
|
70
|
|
71
|
LENGTH(raw-key) = key-len.
|
72
|
PUT-STRING(raw-key, 1, key-len) = FILL("key", key-len).
|
73
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-KEY = raw-key.
|
74
|
|
75
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-ALGORITHM = alg.
|
76
|
|
77
|
MESSAGE alg key-len iv-len.
|
78
|
cipher-text = ENCRYPT(plain-text).
|
79
|
|
80
|
cipher-raw = GET-BYTES(cipher-text, 1, GET-SIZE(cipher-text)).
|
81
|
cipher-hex = HEX-ENCODE(cipher-raw).
|
82
|
iv-hex = HEX-ENCODE(raw-iv).
|
83
|
MESSAGE iv-hex.
|
84
|
MESSAGE LENGTH(cipher-raw) cipher-hex.
|
85
|
|
86
|
IF change-iv THEN DO:
|
87
|
LENGTH(raw-iv1) = iv-len.
|
88
|
PUT-STRING(raw-iv1, 1, iv-len) = FILL("iv", iv-len).
|
89
|
SECURITY-POLICY:SYMMETRIC-ENCRYPTION-IV = raw-iv1.
|
90
|
MESSAGE "IV updated".
|
91
|
iv-hex = HEX-ENCODE(raw-iv1).
|
92
|
MESSAGE iv-hex.
|
93
|
END.
|
94
|
|
95
|
decipher-raw = DECRYPT(cipher-text).
|
96
|
COPY-LOB FROM decipher-raw TO decipher-text.
|
97
|
IF plain-text = decipher-text THEN
|
98
|
MESSAGE "OK".
|
99
|
ELSE
|
100
|
MESSAGE "FAIL".
|
101
|
END.
|
102
|
|