WIP: signing
This commit is contained in:
		
							parent
							
								
									721456de30
								
							
						
					
					
						commit
						5e6be0cf93
					
				
							
								
								
									
										62
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										62
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -51,7 +51,7 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "base64" | ||||
| version = "0.9.0" | ||||
| version = "0.9.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| dependencies = [ | ||||
|  "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| @ -63,7 +63,7 @@ name = "bcrypt" | ||||
| version = "0.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| dependencies = [ | ||||
|  "base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "blowfish 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| @ -229,6 +229,19 @@ dependencies = [ | ||||
|  "backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "foreign-types" | ||||
| version = "0.3.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| dependencies = [ | ||||
|  "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "foreign-types-shared" | ||||
| version = "0.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "fuchsia-zircon" | ||||
| version = "0.3.3" | ||||
| @ -269,6 +282,11 @@ dependencies = [ | ||||
|  "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hex" | ||||
| version = "0.3.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "httparse" | ||||
| version = "1.2.4" | ||||
| @ -433,6 +451,29 @@ name = "opaque-debug" | ||||
| version = "0.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "openssl" | ||||
| version = "0.10.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| dependencies = [ | ||||
|  "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "openssl-sys" | ||||
| version = "0.9.28" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| dependencies = [ | ||||
|  "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ordermap" | ||||
| version = "0.2.13" | ||||
| @ -462,14 +503,23 @@ name = "pest" | ||||
| version = "0.4.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pkg-config" | ||||
| version = "0.3.11" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "plume" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "bcrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "diesel 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "dotenv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "rocket_codegen 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "rocket_contrib 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
| @ -932,7 +982,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| "checksum backtrace 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe525f66f42d207968308ee86bc2dd60aa5fab535b22e616323a173d097d8e" | ||||
| "checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" | ||||
| "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" | ||||
| "checksum base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "229d032f1a99302697f10b27167ae6d03d49d032e6a8e2550e8d3fc13356d2b4" | ||||
| "checksum base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9263aa6a38da271eec5c91a83ce1e800f093c8535788d403d626d8d5c3f8f007" | ||||
| "checksum bcrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a1512813db09170b44a00870b58421876d797b77b085c5205a24db90905f758" | ||||
| "checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" | ||||
| "checksum block-cipher-trait 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6136d803280ae3532efa36114335255ea94f3d75d735ddedd66b0d7cd30bad3" | ||||
| @ -953,12 +1003,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" | ||||
| "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" | ||||
| "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" | ||||
| "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" | ||||
| "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" | ||||
| "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" | ||||
| "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" | ||||
| "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" | ||||
| "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" | ||||
| "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" | ||||
| "checksum heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea04fa3ead4e05e51a7c806fc07271fdbde4e246a6c6d1efd52e72230b771b82" | ||||
| "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" | ||||
| "checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" | ||||
| "checksum humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" | ||||
| "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" | ||||
| @ -982,11 +1035,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| "checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" | ||||
| "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" | ||||
| "checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" | ||||
| "checksum openssl 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)" = "63246f69962e8d5ef865f82a65241d6483c8a2905a1801e2f7feb5d187d51320" | ||||
| "checksum openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)" = "0bbd90640b148b46305c1691eed6039b5c8509bed16991e3562a01eeb76902a3" | ||||
| "checksum ordermap 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b81cf3b8cb96aa0e73bbedfcdc9708d09fec2854ba8d474be4e6f666d7379e8b" | ||||
| "checksum pear 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "b9b645aa07cf1010a67e9f67b4b9b96d6c5fb9315eee678a061d6ab58e9cb77f" | ||||
| "checksum pear_codegen 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ca34109829349aeefe22772916da5404b3f5cd0e63a72c5d91209fc809342265" | ||||
| "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" | ||||
| "checksum pest 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e823a5967bb4cdc6d3e46f47baaf4ecfeae44413a642b74ad44e59e49c7f6" | ||||
| "checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" | ||||
| "checksum pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfb5e575ef93a1b7b2a381d47ba7c5d4e4f73bff37cee932195de769aad9a54" | ||||
| "checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0" | ||||
| "checksum proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "49b6a521dc81b643e9a51e0d1cf05df46d5a2f3c0280ea72bcb68276ba64a118" | ||||
|  | ||||
| @ -3,9 +3,13 @@ authors = ["Bat' <baptiste@gelez.xyz>"] | ||||
| name = "plume" | ||||
| version = "0.1.0" | ||||
| [dependencies] | ||||
| base64 = "0.9.1" | ||||
| bcrypt = "0.2" | ||||
| chrono = "0.4" | ||||
| dotenv = "*" | ||||
| heck = "0.3.0" | ||||
| hex = "0.3" | ||||
| openssl = "0.10.6" | ||||
| rocket = "*" | ||||
| rocket_codegen = "*" | ||||
| serde = "*" | ||||
|  | ||||
| @ -14,3 +14,4 @@ impl<'a, T: Actor, U: Object> Create<'a, T, U> { | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										44
									
								
								src/activity_pub/sign.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/activity_pub/sign.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| use base64; | ||||
| use hex; | ||||
| use chrono::Utc; | ||||
| use openssl::sha::{sha256, sha512}; | ||||
| use serde_json; | ||||
| 
 | ||||
| // Comments are from the Mastodon source code, to knremow what to do.
 | ||||
| 
 | ||||
| pub trait Signer { | ||||
|     fn get_key_id(&self) -> String; | ||||
|     
 | ||||
|     /// Sign some data with the signer keypair
 | ||||
|     fn sign(&self, to_sign: String) -> String; // Base64.strict_encode64(creator.keypair.sign(OpenSSL::Digest::SHA256.new, to_be_signed))
 | ||||
| } | ||||
| 
 | ||||
| pub trait Signable { | ||||
|     fn sign<T>(&mut self, creator: T) -> &mut Self where T: Signer; | ||||
| 
 | ||||
|     fn hash(data: String) -> String { | ||||
|         let bytes = data.into_bytes(); | ||||
|         hex::encode(sha256(&bytes[..])) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Signable for serde_json::Value { | ||||
|     fn sign<T>(&mut self, creator: T) -> &mut serde_json::Value where T: Signer { | ||||
|         let mut options = json!({ | ||||
|             "type": "RsaSignature2017", | ||||
|             "creator": creator.get_key_id(), // [ActivityPub::TagManager.instance.uri_for(creator), '#main-key'].join,
 | ||||
|             "created": Utc::now().to_rfc3339() | ||||
|         }); | ||||
| 
 | ||||
|         //options_hash  = hash(options.without('type', 'id', 'signatureValue').merge('@context' => CONTEXT))
 | ||||
|         let options_hash = Self::hash(String::from("")); | ||||
|         let document_hash = Self::hash(self.to_string()); | ||||
|         let to_be_signed = options_hash + &document_hash; | ||||
| 
 | ||||
|         let signature = base64::encode(&creator.sign(to_be_signed)); | ||||
| 
 | ||||
|         options["signaureValue"] = serde_json::Value::String(signature); | ||||
|         self["signature"] = options; | ||||
|         self | ||||
|     } | ||||
| } | ||||
| @ -1,11 +1,15 @@ | ||||
| #![feature(plugin, custom_derive)] | ||||
| #![plugin(rocket_codegen)] | ||||
| 
 | ||||
| extern crate base64; | ||||
| extern crate bcrypt; | ||||
| extern crate chrono; | ||||
| extern crate heck; | ||||
| extern crate hex; | ||||
| #[macro_use] | ||||
| extern crate diesel; | ||||
| extern crate dotenv; | ||||
| extern crate openssl; | ||||
| extern crate rocket; | ||||
| extern crate rocket_contrib; | ||||
| #[feature(custom_attribute)] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user