@@ -166,57 +166,59 @@ func (c *evpCipher) finalize() {
166
166
}
167
167
}
168
168
169
- func (c * evpCipher ) encrypt (dst , src []byte ) {
169
+ func (c * evpCipher ) encrypt (dst , src []byte ) error {
170
170
if len (src ) < c .blockSize {
171
- panic ( "crypto/cipher: input not full block" )
171
+ return errors . New ( " input not full block" )
172
172
}
173
173
if len (dst ) < c .blockSize {
174
- panic ( "crypto/cipher: output not full block" )
174
+ return errors . New ( " output not full block" )
175
175
}
176
176
// Only check for overlap between the parts of src and dst that will actually be used.
177
177
// This matches Go standard library behavior.
178
178
if inexactOverlap (dst [:c .blockSize ], src [:c .blockSize ]) {
179
- panic ( "crypto/cipher: invalid buffer overlap" )
179
+ return errors . New ( " invalid buffer overlap" )
180
180
}
181
181
if c .enc_ctx == nil {
182
182
var err error
183
183
c .enc_ctx , err = newCipherCtx (c .kind , cipherModeECB , cipherOpEncrypt , c .key , nil )
184
184
if err != nil {
185
- panic ( err )
185
+ return err
186
186
}
187
187
}
188
188
189
189
if C .go_openssl_EVP_EncryptUpdate_wrapper (c .enc_ctx , base (dst ), base (src ), C .int (c .blockSize )) != 1 {
190
- panic ( "crypto/cipher: EncryptUpdate failed" )
190
+ return errors . New ( " EncryptUpdate failed" )
191
191
}
192
192
runtime .KeepAlive (c )
193
+ return nil
193
194
}
194
195
195
- func (c * evpCipher ) decrypt (dst , src []byte ) {
196
+ func (c * evpCipher ) decrypt (dst , src []byte ) error {
196
197
if len (src ) < c .blockSize {
197
- panic ( "crypto/cipher: input not full block" )
198
+ return errors . New ( " input not full block" )
198
199
}
199
200
if len (dst ) < c .blockSize {
200
- panic ( "crypto/cipher: output not full block" )
201
+ return errors . New ( " output not full block" )
201
202
}
202
203
// Only check for overlap between the parts of src and dst that will actually be used.
203
204
// This matches Go standard library behavior.
204
205
if inexactOverlap (dst [:c .blockSize ], src [:c .blockSize ]) {
205
- panic ( "crypto/cipher: invalid buffer overlap" )
206
+ return errors . New ( " invalid buffer overlap" )
206
207
}
207
208
if c .dec_ctx == nil {
208
209
var err error
209
210
c .dec_ctx , err = newCipherCtx (c .kind , cipherModeECB , cipherOpDecrypt , c .key , nil )
210
211
if err != nil {
211
- panic ( err )
212
+ return err
212
213
}
213
214
if C .go_openssl_EVP_CIPHER_CTX_set_padding (c .dec_ctx , 0 ) != 1 {
214
- panic ( "crypto/cipher: could not disable cipher padding" )
215
+ return errors . New ( " could not disable cipher padding" )
215
216
}
216
217
}
217
218
218
219
C .go_openssl_EVP_DecryptUpdate_wrapper (c .dec_ctx , base (dst ), base (src ), C .int (c .blockSize ))
219
220
runtime .KeepAlive (c )
221
+ return nil
220
222
}
221
223
222
224
type cipherCBC struct {
0 commit comments