https://github.com/karlmcguire/ige
IGE block cipher mode for Go.
https://github.com/karlmcguire/ige
aes aes-ige cryptography
Last synced: 3 months ago
JSON representation
IGE block cipher mode for Go.
- Host: GitHub
- URL: https://github.com/karlmcguire/ige
- Owner: karlmcguire
- License: mit
- Created: 2018-06-19T22:13:20.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-06-20T20:38:12.000Z (almost 8 years ago)
- Last Synced: 2025-10-30T23:45:04.251Z (8 months ago)
- Topics: aes, aes-ige, cryptography
- Language: Go
- Homepage:
- Size: 19.5 KB
- Stars: 13
- Watchers: 1
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ige
[](https://godoc.org/github.com/karlmcguire/ige)
[](https://goreportcard.com/report/github.com/karlmcguire/ige)
[](https://gocover.io/karlmcguire/ige)
IGE block cipher mode for Go.
## about
IGE is a block cipher mode usually used with AES. It's most notably used in Telegram's [MTProto Protocol](https://core.telegram.org/mtproto). It can be defined as the following function:
```
c_i = f_k(p_i ^ c_{i-1}) ^ p_{i-1}
```
* `c_i` is ciphertext of the `i` block
* `p_i` is plaintext of the `i` block
* `f_k` is the block cipher function with `k` as the key
Here is a diagram of the above function:
Note that `c_0` and `m_0` in the diagram represent the initilization vectors. This implementation requires an initialization vector of two blocks. The first block is used as `c_0`. The second block is used as `m_0`.
## testing
I'm using the test vectors described in the [official OpenSSL IGE paper](https://www.links.org/files/openssl-ige.pdf). You can execute the tests yourself by running:
```
$ go test
```
### test vector 1
#### key
```
00010203 04050607 08090A0B 0C0D0E0F
```
#### initialization vector
```
00010203 04050607 08090A0B 0C0D0E0F
10111213 14151617 18191A1B 1C1D1E1F
```
#### plaintext
```
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
```
#### ciphertext
```
1A8519A6 557BE652 E9DA8E43 DA4EF445
3CF456B4 CA488AA3 83C79C98 B34797CB
```
### test vector 2
#### key
```
54686973 20697320 616E2069 6D706C65
```
#### initialization vector
```
6D656E74 6174696F 6E206F66 20494745
206D6F64 6520666F 72204F70 656E5353
```
#### plaintext
```
99706487 A1CDE613 BC6DE0B6 F24B1C7A
A448C8B9 C3403E34 67A8CAD8 9340F53B
```
#### ciphertext
```
4C2E204C 65742773 20686F70 65204265
6E20676F 74206974 20726967 6874210A
```