Coherence
  • Home
  • Rand
  • Hash
  • Argon2
  • Poly1305
  • Stream-ciphers
  • Block-ciphers
  • HMAC
  • CMAC
  • VMAC
  • DSA
  • RSA
  • DH
  • ECC
  • ECDH
  • Curve-25519
  • NTRU
  • Security
  • Openssl
  • Json-reference
  • Links
  • Understanding-the-code
Powered by GitBook
On this page
  • Block ciphers
  • AES
  • RC6
  • MARS
  • Twofish
  • Serpent
  • CAST-256
  • Camellia
  • Speck128
  • Simeck64
  • Modes of Operation
  • CTR
  • GCM
  • How to ???

Was this helpful?

Block-ciphers

PreviousStream-ciphersNextHMAC

Last updated 4 years ago

Was this helpful?

Block ciphers

In order to understand hex and type parameters read

In order to understand encryption and decryption read

AES

Description: Block cipher and AES winner.

Key:128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, Performance is impportant, FIPS 197, NIST.

RC6

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

MARS

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Twofish

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Serpent

Description: Block cipher and AES finalist.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

CAST-256

Description: Block cipher and AES finalist.

Key: 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Camellia

Description: Block cipher, The cipher has been approved for use by the ISO/IEC, the European Union's NESSIE project, the Japanese CRYPTREC.

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: General propuse, alternative to AES.

Speck128

Key: 128, 192, 256 bits.

Iv: 128 bits.

Uses: IoT

Simeck64

Key: 128 bits.

Iv: 64 bits.

Uses: IoT

Modes of Operation

CTR

Description: Block cipher mode

Uses: Performance is important.

GCM

Description: Block cipher mode

Uses: Authenticated encryption.

  • It only support "type":"string"

  • It doesn't support "algorithm":"SIMECK64"

How to ???

#!/usr/bin/env python

import requests
import json
import os,binascii

def sending(message):
    url = 'http://127.0.0.1:6613/'
    response = requests.post(url, data=message)
    print response.content
    return response.content

def stream(data_js):
    req=json.loads(data_js)
    print "Enc \n " + json.dumps(req) +"\n"
    data_js_n=sending(json.dumps(req))
    answ=json.loads(data_js_n)
    print "Recived enc: \n" + (json.dumps(answ)) +"\n\n\n"
    dec='{"algorithm":"AES","plaintext":"","iv":"b05691ef92cb9c9bb05691ef92cb9c9b",\
    "version":1,"key":"b05691ef92cb9c9bb05691ef92cb9c9b","operation":"dec","type":"string", "mode":"ctr"}'
    req=json.loads(dec)
    req["plaintext"]=answ["result"]
    print "Dec \n " + json.dumps(req) +"\n"
    data_js_n=sending(json.dumps(req))
    answ2=json.loads(data_js_n)
    print "Recived dec: \n" + (json.dumps(answ2)) +"\n\n\n"


data_js='{ "version": 1 , "algorithm":"AES" , "type":"string", "plaintext": "Hello world!", "hex": 0,"operation":"enc",\
"key":"b05691ef92cb9c9bb05691ef92cb9c9b","iv":"b05691ef92cb9c9bb05691ef92cb9c9b", "mode":"ctr" }'
stream(data_js)

In this example we encrypt and decrypt Hello world! string using AES with the key and iv given in CTR mode.

On datajs["algorithm"] can be one of {AES, RC6, MARS, Twofish, SERPENT, CAST256, CAMELLIA, SPECK128, SIMECK64 }_

#!/usr/bin/env python

import socket
import json
import os,binascii

def sending(message):
    ip = '127.0.0.1'
    port = 6613
    BUFFER_SIZE = 65536
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, port))
    s.send(message)
    data = s.recv(BUFFER_SIZE)
    s.close()
    return data

def stream(data_js):
    req=json.loads(data_js)
    print "Enc \n " + json.dumps(req) +"\n"
    data_js_n=sending(json.dumps(req))
    answ=json.loads(data_js_n)
    print "Recived enc: \n" + (json.dumps(answ)) +"\n\n\n"
    dec='{"algorithm":"AES","plaintext":"","iv":"b05691ef92cb9c9bb05691ef92cb9c9b",\
    "version":1,"key":"b05691ef92cb9c9bb05691ef92cb9c9b","operation":"dec","type":"string", "mode":"gcm" ,"adata":"ABCD"}'
    req=json.loads(dec)
    req["plaintext"]=answ["result"]
    print "Dec \n " + json.dumps(req) +"\n"
    data_js_n=sending(json.dumps(req))
    answ2=json.loads(data_js_n)
    print "Recived dec: \n" + (json.dumps(answ2)) +"\n\n\n"


data_js='{ "version": 1 , "algorithm":"AES" , "type":"string", "plaintext": "Hello world!", "hex": 0,"operation":"enc",\
"key":"b05691ef92cb9c9bb05691ef92cb9c9b","iv":"b05691ef92cb9c9bb05691ef92cb9c9b", "mode":"gcm" ,"adata":"ABCD"}'
stream(data_js)

In this example we encrypt and decrypt Hello world! string using AES with the key,iv,adata given in GCM mode.

On datajs["algorithm"] can be one of {AES, RC6, MARS, Twofish, SERPENT, CAST256, CAMELLIA, SPECK128}_

Json to enc string (key and iv depends on algorithm you chose) in CTR mode

{ "version": 1 , "algorithm":"block flavor" , "type":"string", "plaintext": "your string", "hex":BOOL,
"operation":"enc", "key":"Hex stringsize=32-64","iv":"Hex stringsize=16-32", "mode":"ctr"}

Json to dec string (key and iv depends on algorithm you chose) in CTR mode

{ "version": 1 , "algorithm":"block flavor" , "type":"string", "plaintext": "your hex enc string ", 
"operation":"dec", "key":"Hex stringsize=32-64","iv":"Hex stringsize=16-32", "mode":"ctr"}
  • To enc/dec a file you need to change "type":"string" -> "type":"file" , "plaintext": "your hex enc string " -> "file":"your file"

  • To use enc/dec GCM mode you need to change "mode":"ctr"->"mode":"gcm" , add "adata":"your string" and "hex" parameters

  • "hex" parameter apply for "string" and "adata" parameter

DES algorithm video - 1
DES algorithm video - 2
Hash
Stream
spec
AES algorithm video - 1
AES algorithm video - 2
spec
spec
spec
spec
spec
spec
spec
spec
Modes of Operation video
spec
spec