v2 #12
							
								
								
									
										25
									
								
								resources/models/aes_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								resources/models/aes_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | @startuml aes_classes | ||||||
|  | 
 | ||||||
|  | abstract class Cipher<T extends CipherChunk> { | ||||||
|  |     encrypt(plainText: Uint8List): CipherText<T> | ||||||
|  |     decrypt(cipherText: CipherText<T>): Uint8List | ||||||
|  |     encryptFile(plainTextFile: Path, cipherTextFile: Path) | ||||||
|  |     decryptFile(cipherTextFile: Path, plainTextFile: Path) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class AES extends Cipher { | ||||||
|  |     key: SecretKey | ||||||
|  |     mode: AESMode | ||||||
|  |     padding: Padding | ||||||
|  |     chunkSize: int | ||||||
|  | 
 | ||||||
|  |     encrypt(plainText: Uint8List): CipherText<AESCipherChunk> | ||||||
|  |     decrypt(cipherText: CipherText<AESCipherChunk>): Uint8List | ||||||
|  |     encryptFile(plainTextFile: Path, cipherTextFile: Path) | ||||||
|  |     decryptFile(cipherTextFile: Path, plainTextFile: Path) | ||||||
|  | 
 | ||||||
|  |     encryptWithIV(plainText: Uint8List, iv: Uint8List): AESCipherChunk | ||||||
|  |     decryptWithIV(cipherChunk: AESCipherChunk, iv: Uint8List): Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										44
									
								
								resources/models/aes_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								resources/models/aes_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | @startuml aes_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant AES as aes | ||||||
|  | participant CipherText as ct | ||||||
|  | participant CipherChunk as cc | ||||||
|  | participant NativeCrypto as nc | ||||||
|  | 
 | ||||||
|  | user -> aes : new(key: SecretKey, mode: Mode, padding: Padding, chunkSize: int) | ||||||
|  | activate aes | ||||||
|  | aes --> user : AES | ||||||
|  | user -> aes : encrypt(plainText: Uint8List) | ||||||
|  | 
 | ||||||
|  | loop for each chunk in plainText | ||||||
|  |     aes -> nc : encrypt(chunk: Uint8List, key: Uint8List, "aes/gcm/NoPadding") | ||||||
|  |     nc --> aes : Uint8List | ||||||
|  |     aes -> cc : new(chunk: Uint8List) | ||||||
|  |     cc --> aes : CipherChunk | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | aes -> ct : new(chunks: List<CipherChunk>) | ||||||
|  | ct --> aes : CipherText | ||||||
|  | aes --> user : CipherText | ||||||
|  | 
 | ||||||
|  | user -> aes : decrypt(cipherText: CipherText) | ||||||
|  | loop for each chunk in cipherText.chunks | ||||||
|  |     aes -> nc : decrypt(chunk: Uint8List, key: Uint8List, "aes/gcm/NoPadding") | ||||||
|  |     nc --> aes : Uint8List | ||||||
|  |     aes --> aes : concat Uint8List | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | aes --> user : Uint8List | ||||||
|  | 
 | ||||||
|  | user -> aes : encryptFile(plainTextFile: File, cipherTextFile: File) | ||||||
|  | aes -> nc : encryptFile(plainTextFile: File, cipherTextFile: File, key: Uint8List, "aes/gcm/NoPadding") | ||||||
|  | nc --> aes : void | ||||||
|  | aes --> user : void | ||||||
|  | 
 | ||||||
|  | user -> aes : decryptFile(cipherTextFile: File, plainTextFile: File) | ||||||
|  | aes -> nc : decryptFile(cipherTextFile: File, plainTextFile: File, key: Uint8List, "aes/gcm/NoPadding") | ||||||
|  | nc --> aes : void | ||||||
|  | aes --> user : void | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										63
									
								
								resources/models/cipher_text_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								resources/models/cipher_text_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | @startuml cipher_text_classes | ||||||
|  | 
 | ||||||
|  | abstract class ByteArray { | ||||||
|  |     bytes : Uint8List | ||||||
|  |     length : int | ||||||
|  | 
 | ||||||
|  |     ByteArray(bytes: Uint8List) | ||||||
|  | 
 | ||||||
|  |     fromList(list: List<int>) | ||||||
|  |     fromLength(length: int, {fill: int = 0}) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  | 
 | ||||||
|  |     toList() : List<int> | ||||||
|  |     toUtf16() : String | ||||||
|  |     toUtf8() : String | ||||||
|  |     toBase64() : String | ||||||
|  |     toBase16() : String | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class CipherChunk extends ByteArray { | ||||||
|  |     CipherChunk(bytes: Uint8List) | ||||||
|  | 
 | ||||||
|  |     fromList(list: List<int>) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class CipherText<T extends CipherChunk> extends ByteArray { | ||||||
|  |     chunkSize : int | ||||||
|  |     chunks : List<T> | ||||||
|  | 
 | ||||||
|  |     CipherText(bytes: Uint8List, {chunkSize: int = 33554432}) | ||||||
|  | 
 | ||||||
|  |     fromList(list: List<int>) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  | 
 | ||||||
|  |     toList() : List<int> | ||||||
|  |     toUtf16() : String | ||||||
|  |     toUtf8() : String | ||||||
|  |     toBase64() : String | ||||||
|  |     toBase16() : String | ||||||
|  | 
 | ||||||
|  |     fromChunks(chunks: List<T>) | ||||||
|  |     toChunks() : List<T> | ||||||
|  |     toBytes() : Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class AESCipherChunk extends CipherChunk { | ||||||
|  |     iv : Uint8List | ||||||
|  |     message : Uint8List | ||||||
|  |     tag : Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										19
									
								
								resources/models/cipher_text_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								resources/models/cipher_text_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | @startuml cipher_text_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant CipherText as ct | ||||||
|  | participant CipherChunk as cc | ||||||
|  | 
 | ||||||
|  | user -> ct : new(bytes) | ||||||
|  | loop for each chunk | ||||||
|  |     ct -> cc : new(bytes) | ||||||
|  |     cc --> ct | ||||||
|  | end | ||||||
|  | ct --> user : CipherText | ||||||
|  | 
 | ||||||
|  | user -> ct : new(bytes, chunkSize: bytes.length) | ||||||
|  | ct -> cc : new(bytes) | ||||||
|  | cc --> ct | ||||||
|  | ct --> user : CipherText | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										25
									
								
								resources/models/digest_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								resources/models/digest_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | @startuml digest_classes | ||||||
|  | 
 | ||||||
|  | abstract class Hash { | ||||||
|  |     digest(data: Uint8List): Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | abstract class Hmac { | ||||||
|  |     digest(data: Uint8List, key: Uint8List): Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Hmac o-- Hash | ||||||
|  | 
 | ||||||
|  | class Sha256 extends Hash { | ||||||
|  |     static instance: Sha256 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class Sha512 extends Hash { | ||||||
|  |     static instance: Sha512 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class HmacSha256 extends Hmac { | ||||||
|  |     static instance: HmacSha256 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										29
									
								
								resources/models/digest_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								resources/models/digest_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | @startuml digest_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant Flutter as flt | ||||||
|  | participant Sha256 as sha | ||||||
|  | participant HmacSha256 as hmac | ||||||
|  | participant NativeCrypto as nc | ||||||
|  | 
 | ||||||
|  | user -> flt : getDigest("sha256") | ||||||
|  | flt -> sha : getInstance() | ||||||
|  | sha --> flt : Sha256 | ||||||
|  | flt --> user : Sha256 | ||||||
|  | 
 | ||||||
|  | user -> sha : digest(data) | ||||||
|  | sha --> nc : hash(data, "sha256") | ||||||
|  | nc --> sha : digest | ||||||
|  | sha --> user : digest | ||||||
|  | 
 | ||||||
|  | user -> flt : getDigest("hmacSha256") | ||||||
|  | flt -> hmac : getInstance() | ||||||
|  | hmac --> flt : HmacSha256 | ||||||
|  | flt --> user : HmacSha256 | ||||||
|  | 
 | ||||||
|  | user -> hmac : digest(data) | ||||||
|  | hmac --> nc : hmac(data, key, "sha256") | ||||||
|  | nc --> hmac : digest | ||||||
|  | hmac --> user : digest | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										9
									
								
								resources/models/generator_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								resources/models/generator_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | @startuml generator_classes | ||||||
|  | 
 | ||||||
|  | abstract class Random { | ||||||
|  |     generate(bytes: int): Uint8List | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class SecureRandom extends Random {} | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										15
									
								
								resources/models/generator_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								resources/models/generator_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | @startuml generator_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant SecureRandom as rand | ||||||
|  | participant NativeCrypto as nc | ||||||
|  | 
 | ||||||
|  | user -> rand : new() | ||||||
|  | rand --> user : SecureRandom | ||||||
|  | 
 | ||||||
|  | user -> rand : generate(32) | ||||||
|  | rand -> nc : generateRandomBytes(32) | ||||||
|  | nc --> rand : Uint8List(32) | ||||||
|  | rand --> user : Uint8List(32) | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										17
									
								
								resources/models/kdf_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								resources/models/kdf_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | @startuml kdf_classes | ||||||
|  | 
 | ||||||
|  | abstract class KeyDerivationFunction { | ||||||
|  |     derive(keyMaterial: Uint8List) : Uint8List | ||||||
|  |     verify(keyMaterial: Uint8List, expected: Uint8List) : bool | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class PBKDF2 extends KeyDerivationFunction { | ||||||
|  |     hashAlgorithm: Hash | ||||||
|  |     iterations: int | ||||||
|  |     salt: Uint8List | ||||||
|  |     length: int | ||||||
|  | 
 | ||||||
|  |     call({password: String}) : SecretKey | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										20
									
								
								resources/models/kdf_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								resources/models/kdf_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | @startuml kdf_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant Pbkdf2 as kdf | ||||||
|  | participant NativeCrypto as nc | ||||||
|  | 
 | ||||||
|  | user -> kdf: new(hash, iterations, salt, length) | ||||||
|  | kdf--> user : Pbkdf2 | ||||||
|  | 
 | ||||||
|  | user -> kdf: derive(password) | ||||||
|  | kdf--> nc : pbkdf2(password, hash, iterations, salt, length) | ||||||
|  | nc --> kdf: Uint8List(length) | ||||||
|  | kdf--> user : SecretKey | ||||||
|  | 
 | ||||||
|  | user -> kdf : verify(password, key) | ||||||
|  | kdf--> nc : pbkdf2(password, hash, iterations, salt, length) | ||||||
|  | nc --> kdf: Uint8List(length) | ||||||
|  | kdf--> user : bool | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										40
									
								
								resources/models/key_classes.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								resources/models/key_classes.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | @startuml key_classes | ||||||
|  | 
 | ||||||
|  | abstract class ByteArray { | ||||||
|  |     bytes : Uint8List | ||||||
|  |     length : int | ||||||
|  | 
 | ||||||
|  |     fromList(list: List<int> ) | ||||||
|  |     fromLength(length: int, {fill: int = 0}) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  | 
 | ||||||
|  |     toList() : List<int> | ||||||
|  |     toUtf16() : String | ||||||
|  |     toUtf8() : String | ||||||
|  |     toBase64() : String | ||||||
|  |     toBase16() : String | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | abstract class Key extends ByteArray { | ||||||
|  |     fromList(list: List<int> ) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class SecretKey extends Key { | ||||||
|  |     fromList(list: List<int>) | ||||||
|  |     fromUtf16(encoded: String) | ||||||
|  |     fromUtf8(encoded: String) | ||||||
|  |     fromBase64(encoded: String) | ||||||
|  |     fromBase16(encoded: String) | ||||||
|  |      | ||||||
|  |     async fromSecureRandom(bytes: int) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
							
								
								
									
										17
									
								
								resources/models/key_dss.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								resources/models/key_dss.puml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | @startuml key_dss | ||||||
|  | 
 | ||||||
|  | actor user | ||||||
|  | participant SecretKey as sk | ||||||
|  | participant SecureRandom as rand | ||||||
|  | participant NativeCrypto as nc | ||||||
|  | 
 | ||||||
|  | user -> sk : fromSecureRandom(32) | ||||||
|  | sk -> rand : new() | ||||||
|  | rand --> sk : SecureRandom | ||||||
|  | sk -> rand : generate(32) | ||||||
|  | rand -> nc : generateRandomBytes(32) | ||||||
|  | nc --> rand : Uint8List(32) | ||||||
|  | rand --> sk : Uint8List(32) | ||||||
|  | sk --> user : SecretKey | ||||||
|  | 
 | ||||||
|  | @enduml | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user