ecb.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package ecb
  2. import (
  3. "crypto/cipher"
  4. )
  5. type encrypter struct {
  6. b cipher.Block
  7. blockSize int
  8. }
  9. func NewEncrypter(b cipher.Block) cipher.BlockMode {
  10. return &encrypter{
  11. b: b,
  12. blockSize: b.BlockSize(),
  13. }
  14. }
  15. func (enc *encrypter) BlockSize() int { return enc.blockSize }
  16. func (enc *encrypter) CryptBlocks(dst, src []byte) {
  17. if len(src)%enc.blockSize != 0 {
  18. panic("crypto/cipher: input not full blocks")
  19. } else if len(dst) < len(src) {
  20. panic("crypto/cipher: output smaller than input")
  21. }
  22. for len(src) > 0 {
  23. enc.b.Encrypt(dst, src[:enc.blockSize])
  24. src = src[enc.blockSize:]
  25. dst = dst[enc.blockSize:]
  26. }
  27. }
  28. type decrypter struct {
  29. b cipher.Block
  30. blockSize int
  31. }
  32. func NewDecrypter(b cipher.Block) cipher.BlockMode {
  33. return &decrypter{
  34. b: b,
  35. blockSize: b.BlockSize(),
  36. }
  37. }
  38. func (dec *decrypter) BlockSize() int { return dec.blockSize }
  39. func (dec *decrypter) CryptBlocks(dst, src []byte) {
  40. if len(src)%dec.blockSize != 0 {
  41. panic("crypto/cipher: input not full blocks")
  42. } else if len(dst) < len(src) {
  43. panic("crypto/cipher: output smaller than input")
  44. }
  45. for len(src) > 0 {
  46. dec.b.Decrypt(dst, src[:dec.blockSize])
  47. src = src[dec.blockSize:]
  48. dst = dst[dec.blockSize:]
  49. }
  50. }