mirror of
https://github.com/Drop-OSS/droplet.git
synced 2025-11-13 16:22:48 +10:00
3
.gitignore
vendored
3
.gitignore
vendored
@ -201,3 +201,6 @@ index.js
|
|||||||
index.d.ts
|
index.d.ts
|
||||||
test.mjs
|
test.mjs
|
||||||
manifest.json
|
manifest.json
|
||||||
|
|
||||||
|
# JetBrains
|
||||||
|
.idea
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
use std::{fs::{self, metadata}, path::{Path, PathBuf}};
|
use std::{fs::{self, metadata}, path::{Path, PathBuf}};
|
||||||
|
|
||||||
fn _list_files(vec: &mut Vec<PathBuf>, path: &Path) {
|
fn _list_files(vec: &mut Vec<PathBuf>, path: &Path) {
|
||||||
if metadata(&path).unwrap().is_dir() {
|
if metadata(path).unwrap().is_dir() {
|
||||||
let paths = fs::read_dir(&path).unwrap();
|
let paths = fs::read_dir(path).unwrap();
|
||||||
for path_result in paths {
|
for path_result in paths {
|
||||||
let full_path = path_result.unwrap().path();
|
let full_path = path_result.unwrap().path();
|
||||||
if metadata(&full_path).unwrap().is_dir() {
|
if metadata(&full_path).unwrap().is_dir() {
|
||||||
@ -16,6 +16,6 @@ fn _list_files(vec: &mut Vec<PathBuf>, path: &Path) {
|
|||||||
|
|
||||||
pub fn list_files(path: &Path) -> Vec<PathBuf> {
|
pub fn list_files(path: &Path) -> Vec<PathBuf> {
|
||||||
let mut vec = Vec::new();
|
let mut vec = Vec::new();
|
||||||
_list_files(&mut vec, &path);
|
_list_files(&mut vec, path);
|
||||||
return vec;
|
vec
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,4 +6,3 @@ pub mod ssl;
|
|||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate napi_derive;
|
extern crate napi_derive;
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::HashMap, fs::File, hash::Hasher, io::{BufRead, BufReader}, path::Path, thread
|
collections::HashMap, fs::File, io::{BufRead, BufReader}, path::Path, thread
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use std::os::unix::fs::PermissionsExt;
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
|
||||||
use gxhash::{gxhash128, GxHasher};
|
|
||||||
use napi::{
|
use napi::{
|
||||||
threadsafe_function::{ErrorStrategy, ThreadsafeFunction, ThreadsafeFunctionCallMode},
|
threadsafe_function::{ErrorStrategy, ThreadsafeFunction, ThreadsafeFunctionCallMode},
|
||||||
Error, JsFunction,
|
Error, JsFunction,
|
||||||
@ -85,7 +84,7 @@ pub fn generate_manifest(
|
|||||||
let mut reader = BufReader::with_capacity(CHUNK_SIZE, file);
|
let mut reader = BufReader::with_capacity(CHUNK_SIZE, file);
|
||||||
|
|
||||||
let mut chunk_data = ChunkData {
|
let mut chunk_data = ChunkData {
|
||||||
permissions: permissions,
|
permissions,
|
||||||
ids: Vec::new(),
|
ids: Vec::new(),
|
||||||
checksums: Vec::new(),
|
checksums: Vec::new(),
|
||||||
lengths: Vec::new(),
|
lengths: Vec::new(),
|
||||||
@ -133,5 +132,5 @@ pub fn generate_manifest(
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return Ok(());
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
34
src/ssl.rs
34
src/ssl.rs
@ -7,7 +7,6 @@ use openssl::{
|
|||||||
nid::Nid,
|
nid::Nid,
|
||||||
pkey::PKey,
|
pkey::PKey,
|
||||||
sign::{Signer, Verifier},
|
sign::{Signer, Verifier},
|
||||||
ssl::{SslConnector, SslContext, SslMethod},
|
|
||||||
stack::Stack,
|
stack::Stack,
|
||||||
x509::{
|
x509::{
|
||||||
extension::{AuthorityKeyIdentifier, BasicConstraints, KeyUsage, SubjectKeyIdentifier},
|
extension::{AuthorityKeyIdentifier, BasicConstraints, KeyUsage, SubjectKeyIdentifier},
|
||||||
@ -15,6 +14,13 @@ use openssl::{
|
|||||||
X509Builder, X509NameBuilder, X509ReqBuilder, X509StoreContext, X509,
|
X509Builder, X509NameBuilder, X509ReqBuilder, X509StoreContext, X509,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
use openssl::asn1::Asn1Integer;
|
||||||
|
|
||||||
|
fn create_serial_number() -> Asn1Integer {
|
||||||
|
let mut serial = BigNum::new().unwrap();
|
||||||
|
serial.rand(159, MsbOption::MAYBE_ZERO, false).unwrap();
|
||||||
|
serial.to_asn1_integer().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
#[napi]
|
#[napi]
|
||||||
pub fn generate_root_ca() -> Result<Vec<String>, Error> {
|
pub fn generate_root_ca() -> Result<Vec<String>, Error> {
|
||||||
@ -25,11 +31,7 @@ pub fn generate_root_ca() -> Result<Vec<String>, Error> {
|
|||||||
let mut x509_builder = X509Builder::new().unwrap();
|
let mut x509_builder = X509Builder::new().unwrap();
|
||||||
x509_builder.set_version(2).unwrap();
|
x509_builder.set_version(2).unwrap();
|
||||||
|
|
||||||
let serial_number = {
|
let serial_number = create_serial_number();
|
||||||
let mut serial = BigNum::new().unwrap();
|
|
||||||
serial.rand(159, MsbOption::MAYBE_ZERO, false).unwrap();
|
|
||||||
serial.to_asn1_integer().unwrap()
|
|
||||||
};
|
|
||||||
x509_builder.set_serial_number(&serial_number).unwrap();
|
x509_builder.set_serial_number(&serial_number).unwrap();
|
||||||
|
|
||||||
let mut x509_name = X509NameBuilder::new().unwrap();
|
let mut x509_name = X509NameBuilder::new().unwrap();
|
||||||
@ -72,10 +74,10 @@ pub fn generate_root_ca() -> Result<Vec<String>, Error> {
|
|||||||
|
|
||||||
let x509 = x509_builder.build();
|
let x509 = x509_builder.build();
|
||||||
|
|
||||||
return Ok(vec![
|
Ok(vec![
|
||||||
String::from_utf8(x509.to_pem().unwrap()).unwrap(),
|
String::from_utf8(x509.to_pem().unwrap()).unwrap(),
|
||||||
String::from_utf8(key_pair.private_key_to_pem_pkcs8().unwrap()).unwrap(),
|
String::from_utf8(key_pair.private_key_to_pem_pkcs8().unwrap()).unwrap(),
|
||||||
]);
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi]
|
#[napi]
|
||||||
@ -121,11 +123,7 @@ pub fn generate_client_certificate(
|
|||||||
x509_builder.set_version(2).unwrap();
|
x509_builder.set_version(2).unwrap();
|
||||||
x509_builder.set_pubkey(&key_pair).unwrap();
|
x509_builder.set_pubkey(&key_pair).unwrap();
|
||||||
|
|
||||||
let serial_number = {
|
let serial_number = create_serial_number();
|
||||||
let mut serial = BigNum::new().unwrap();
|
|
||||||
serial.rand(159, MsbOption::MAYBE_ZERO, false).unwrap();
|
|
||||||
serial.to_asn1_integer().unwrap()
|
|
||||||
};
|
|
||||||
x509_builder.set_serial_number(&serial_number).unwrap();
|
x509_builder.set_serial_number(&serial_number).unwrap();
|
||||||
|
|
||||||
x509_builder.set_subject_name(req.subject_name()).unwrap();
|
x509_builder.set_subject_name(req.subject_name()).unwrap();
|
||||||
@ -173,10 +171,10 @@ pub fn generate_client_certificate(
|
|||||||
|
|
||||||
let x509 = x509_builder.build();
|
let x509 = x509_builder.build();
|
||||||
|
|
||||||
return Ok(vec![
|
Ok(vec![
|
||||||
String::from_utf8(x509.to_pem().unwrap()).unwrap(),
|
String::from_utf8(x509.to_pem().unwrap()).unwrap(),
|
||||||
String::from_utf8(key_pair.private_key_to_pem_pkcs8().unwrap()).unwrap(),
|
String::from_utf8(key_pair.private_key_to_pem_pkcs8().unwrap()).unwrap(),
|
||||||
]);
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi]
|
#[napi]
|
||||||
@ -196,7 +194,7 @@ pub fn verify_client_certificate(client_cert: String, root_ca: String) -> Result
|
|||||||
.init(&store, &client_cert, &chain, |c| c.verify_cert())
|
.init(&store, &client_cert, &chain, |c| c.verify_cert())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
return Ok(result);
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi]
|
#[napi]
|
||||||
@ -210,7 +208,7 @@ pub fn sign_nonce(private_key: String, nonce: String) -> Result<String, Error> {
|
|||||||
|
|
||||||
let hex_signature = hex::encode(signature);
|
let hex_signature = hex::encode(signature);
|
||||||
|
|
||||||
return Ok(hex_signature);
|
Ok(hex_signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi]
|
#[napi]
|
||||||
@ -229,5 +227,5 @@ pub fn verify_nonce(public_cert: String, nonce: String, signature: String) -> Re
|
|||||||
|
|
||||||
let result = verifier.verify(&signature).unwrap();
|
let result = verifier.verify(&signature).unwrap();
|
||||||
|
|
||||||
return Ok(result);
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user