@@ -39,82 +39,52 @@ func (c *blockCipher) SetAAD(aad []byte) {
3939}
4040
4141func (c * blockCipher ) Encrypt (src []byte , block cipher.Block ) (dst []byte , err error ) {
42- var paddedSrc []byte
43- switch c .Padding {
44- case No :
45- paddedSrc = src
46- case Zero :
47- paddedSrc = newZeroPadding (src , block .BlockSize ())
48- case PKCS5 :
49- paddedSrc = newPKCS5Padding (src )
50- case PKCS7 :
51- paddedSrc = newPKCS7Padding (src , block .BlockSize ())
52- case AnsiX923 :
53- paddedSrc = newAnsiX923Padding (src , block .BlockSize ())
54- case ISO97971 :
55- paddedSrc = newISO97971Padding (src , block .BlockSize ())
56- case ISO10126 :
57- paddedSrc = newISO10126Padding (src , block .BlockSize ())
58- case ISO78164 :
59- paddedSrc = newISO78164Padding (src , block .BlockSize ())
60- case Bit :
61- paddedSrc = newBitPadding (src , block .BlockSize ())
42+ if c .Block == CFB {
43+ return newCFBEncrypter (src , c .IV , block )
6244 }
63- switch c .Block {
64- case CBC :
65- return newCBCEncrypter (paddedSrc , c .IV , block )
66- case ECB :
67- return newECBEncrypter (paddedSrc , block )
68- case CTR :
45+ if c .Block == OFB {
46+ return newOFBEncrypter (src , c .IV , block )
47+ }
48+ if c .Block == CTR {
6949 return newCTREncrypter (src , c .IV , block )
70- case GCM :
50+ }
51+ if c .Block == GCM {
7152 return newGCMEncrypter (src , c .Nonce , c .AAD , block )
72- case CFB :
73- return newCFBEncrypter (src , c .IV , block )
74- case OFB :
75- return newOFBEncrypter (src , c .IV , block )
53+ }
54+
55+ paddedSrc := newPadding (c .Padding , src , block .BlockSize ())
56+ if c .Block == CBC {
57+ return newCBCEncrypter (paddedSrc , c .IV , block )
58+ }
59+ if c .Block == ECB {
60+ return newECBEncrypter (paddedSrc , block )
7661 }
7762 return
7863}
7964
8065func (c * blockCipher ) Decrypt (src []byte , block cipher.Block ) (dst []byte , err error ) {
66+ if c .Block == CFB {
67+ return newCFBDecrypter (src , c .IV , block )
68+ }
69+ if c .Block == OFB {
70+ return newOFBDecrypter (src , c .IV , block )
71+ }
72+ if c .Block == CTR {
73+ return newCTRDecrypter (src , c .IV , block )
74+ }
75+ if c .Block == GCM {
76+ return newGCMDecrypter (src , c .Nonce , c .AAD , block )
77+ }
8178 var decrypted []byte
82- switch c .Block {
83- case CBC :
79+ if c .Block == CBC {
8480 decrypted , err = newCBCDecrypter (src , c .IV , block )
85- case CTR :
86- decrypted , err = newCTRDecrypter (src , c .IV , block )
87- case ECB :
81+ }
82+ if c .Block == ECB {
8883 decrypted , err = newECBDecrypter (src , block )
89- case GCM :
90- decrypted , err = newGCMDecrypter (src , c .Nonce , c .AAD , block )
91- case CFB :
92- decrypted , err = newCFBDecrypter (src , c .IV , block )
93- case OFB :
94- decrypted , err = newOFBDecrypter (src , c .IV , block )
9584 }
9685 if err != nil {
9786 return
9887 }
99- switch c .Padding {
100- case No :
101- dst = decrypted
102- case Zero :
103- dst = newZeroUnPadding (decrypted )
104- case PKCS5 :
105- dst = newPKCS5UnPadding (decrypted )
106- case PKCS7 :
107- dst = newPKCS7UnPadding (decrypted )
108- case AnsiX923 :
109- dst = newAnsiX923UnPadding (decrypted )
110- case ISO97971 :
111- dst = newISO97971UnPadding (decrypted )
112- case ISO10126 :
113- dst = newISO10126UnPadding (decrypted )
114- case ISO78164 :
115- dst = newISO78164UnPadding (decrypted )
116- case Bit :
117- dst = newBitUnPadding (decrypted )
118- }
88+ dst = newUnPadding (c .Padding , decrypted )
11989 return
12090}
0 commit comments