Skip to content

Instantly share code, notes, and snippets.

@DeanThompson
Last active February 12, 2023 05:10
Show Gist options
  • Save DeanThompson/17056cc40b4899e3e7f4 to your computer and use it in GitHub Desktop.
Save DeanThompson/17056cc40b4899e3e7f4 to your computer and use it in GitHub Desktop.
Golang AES ecb mode
package utils
import "crypto/cipher"
type ecb struct {
b cipher.Block
blockSize int
}
func newECB(b cipher.Block) *ecb {
return &ecb{
b: b,
blockSize: b.BlockSize(),
}
}
type ecbEncrypter ecb
func NewECBEncrypter(b cipher.Block) cipher.BlockMode {
return (*ecbEncrypter)(newECB(b))
}
func (x *ecbEncrypter) BlockSize() int { return x.blockSize }
func (x *ecbEncrypter) CryptBlocks(dst, src []byte) {
if len(src)%x.blockSize != 0 {
panic("crypto/cipher: input not full blocks")
}
if len(dst) < len(src) {
panic("crypto/cipher: output smaller than input")
}
for len(src) > 0 {
x.b.Encrypt(dst, src[:x.blockSize])
src = src[x.blockSize:]
dst = dst[x.blockSize:]
}
}
type ecbDecrypter ecb
func NewECBDecrypter(b cipher.Block) cipher.BlockMode {
return (*ecbDecrypter)(newECB(b))
}
func (x *ecbDecrypter) BlockSize() int { return x.blockSize }
func (x *ecbDecrypter) CryptBlocks(dst, src []byte) {
if len(src)%x.blockSize != 0 {
panic("crypto/cipher: input not full blocks")
}
if len(dst) < len(src) {
panic("crypto/cipher: output smaller than input")
}
for len(src) > 0 {
x.b.Decrypt(dst, src[:x.blockSize])
src = src[x.blockSize:]
dst = dst[x.blockSize:]
}
}
@tamalsaha
Copy link

tamalsaha commented Feb 6, 2017

@DeanThompson Thanks for your code. Do you mind adding a license in the comments?

@MaJloe3Jlo
Copy link

Thanx a lot, man!! It's really helpful!

@xiaket
Copy link

xiaket commented May 7, 2018

@fcarrero
Copy link

fcarrero commented Nov 9, 2020

ey guys, anybody has an example where I can see how to use this functionality?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment