v/vlib/crypto
Nick Treleaven 7231a3f135
vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702)
2022-03-09 20:26:00 +02:00
..
aes crypto: crypto.aes CBC mode moves to crypto.cipher (#13084) 2022-01-08 17:08:46 +02:00
bcrypt vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
blowfish crypto.blowfish: add doc comments for the public API (#12609) 2021-11-29 22:19:52 +02:00
cipher vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
des crypto: add a crypto.des module (#13065) 2022-01-07 13:51:37 +02:00
ed25519 vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
hmac all: replace "NB:" with "Note:" (docs/comments) 2022-03-06 20:01:22 +03:00
internal/subtle all: update copyright year 2022-01-04 12:21:12 +03:00
md5 vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
rand all: replace "NB:" with "Note:" (docs/comments) 2022-03-06 20:01:22 +03:00
rc4 all: update copyright year 2022-01-04 12:21:12 +03:00
sha1 vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
sha256 vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
sha512 vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702) 2022-03-09 20:26:00 +02:00
README.md crypto: implement `rand.bytes(needed_bytes int) ?[]byte`, use it consistently instead of the old rand.read(), which will change to be compatible with io and the pseudo random `rand` module 2022-02-15 18:39:33 +02:00
crypto.v tools: make `v test-cleancode` test everything by default (#10050) 2021-05-08 13:32:29 +03:00

README.md

Description:

crypto is a module that exposes cryptographic algorithms to V programs.

Each submodule implements things differently, so be sure to consider the documentation of the specific algorithm you need, but in general, the method is to create a cipher struct using one of the module functions, and then to call the encrypt or decrypt method on that struct to actually encrypt or decrypt your data.

This module is a work-in-progress. For example, the AES implementation currently requires you to create a destination buffer of the correct size to receive the decrypted data, and the AesCipher encrypt and decrypt functions only operate on the first block of the src.

The implementations here are loosely based on Go's crypto package.

Examples:

import crypto.aes
import crypto.rand

fn main() {
	// remember to save this key somewhere if you ever want to decrypt your data
	key := rand.bytes(32) ?
	println('KEY: $key')

	// this data is one block (16 bytes) big
	mut data := 'THIS IS THE DATA'.bytes()

	println('generating cipher')
	cipher := aes.new_cipher(key)

	println('performing encryption')
	mut encrypted := []byte{len: aes.block_size}
	cipher.encrypt(mut encrypted, data)
	println(encrypted)

	println('performing decryption')
	mut decrypted := []byte{len: aes.block_size}
	cipher.decrypt(mut decrypted, encrypted)
	println(decrypted)

	assert decrypted == data
}