Project

General

Profile

crypto.p

Igor Skornyakov, 02/14/2023 09:57 AM

Download (4.98 KB)

 
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