Project

General

Profile

crypto.p

Igor Skornyakov, 05/17/2019 01:25 PM

Download (3.12 KB)

 
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