├── LICENSE ├── README.md ├── agent ├── .dockerignore ├── .gitignore ├── .rpm │ └── iam-ssh-agent.spec ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md ├── script │ ├── client │ └── server ├── src │ ├── agent.rs │ ├── agent │ │ └── service.rs │ └── main.rs └── tmp │ └── .gitkeep ├── client ├── .gitignore ├── README.md ├── package-lock.json └── package.json ├── images ├── protocol.png └── protocol.txt └── service ├── .gitignore ├── README.md ├── README_SAR.md ├── ssh-agent-backend ├── .npmignore ├── GetSignature.js ├── ListIdentities.js ├── lib.js ├── node_modules │ ├── asn1 │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ │ ├── ber │ │ │ │ ├── errors.js │ │ │ │ ├── index.js │ │ │ │ ├── reader.js │ │ │ │ ├── types.js │ │ │ │ └── writer.js │ │ │ └── index.js │ │ └── package.json │ ├── bcrypt-pbkdf │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── safer-buffer │ │ ├── LICENSE │ │ ├── Porting-Buffer.md │ │ ├── Readme.md │ │ ├── dangerous.js │ │ ├── package.json │ │ ├── safer.js │ │ └── tests.js │ ├── ssh2-streams │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── SFTPStream.md │ │ ├── index.js │ │ ├── lib │ │ │ ├── buffer-helpers.js │ │ │ ├── constants.js │ │ │ ├── jsbn.js │ │ │ ├── keyParser.js │ │ │ ├── node-fs-compat.js │ │ │ ├── sftp.js │ │ │ ├── ssh.js │ │ │ └── utils.js │ │ ├── package.json │ │ └── test │ │ │ ├── fixtures │ │ │ ├── openssh_new_dsa │ │ │ ├── openssh_new_dsa.pub │ │ │ ├── openssh_new_dsa.pub.result │ │ │ ├── openssh_new_dsa.result │ │ │ ├── openssh_new_dsa_enc │ │ │ ├── openssh_new_dsa_enc.pub │ │ │ ├── openssh_new_dsa_enc.pub.result │ │ │ ├── openssh_new_dsa_enc.result │ │ │ ├── openssh_new_dsa_enc_gcm │ │ │ ├── openssh_new_dsa_enc_gcm.pub │ │ │ ├── openssh_new_dsa_enc_gcm.pub.result │ │ │ ├── openssh_new_dsa_enc_gcm.result │ │ │ ├── openssh_new_ecdsa │ │ │ ├── openssh_new_ecdsa.pub │ │ │ ├── openssh_new_ecdsa.pub.result │ │ │ ├── openssh_new_ecdsa.result │ │ │ ├── openssh_new_ecdsa_enc │ │ │ ├── openssh_new_ecdsa_enc.pub │ │ │ ├── openssh_new_ecdsa_enc.pub.result │ │ │ ├── openssh_new_ecdsa_enc.result │ │ │ ├── openssh_new_ecdsa_enc_gcm │ │ │ ├── openssh_new_ecdsa_enc_gcm.pub │ │ │ ├── openssh_new_ecdsa_enc_gcm.pub.result │ │ │ ├── openssh_new_ecdsa_enc_gcm.result │ │ │ ├── openssh_new_ed25519 │ │ │ ├── openssh_new_ed25519.pub │ │ │ ├── openssh_new_ed25519.pub.result │ │ │ ├── openssh_new_ed25519.result │ │ │ ├── openssh_new_rsa │ │ │ ├── openssh_new_rsa.pub │ │ │ ├── openssh_new_rsa.pub.result │ │ │ ├── openssh_new_rsa.result │ │ │ ├── openssh_new_rsa_enc │ │ │ ├── openssh_new_rsa_enc.pub │ │ │ ├── openssh_new_rsa_enc.pub.result │ │ │ ├── openssh_new_rsa_enc.result │ │ │ ├── openssh_new_rsa_enc_gcm │ │ │ ├── openssh_new_rsa_enc_gcm.pub │ │ │ ├── openssh_new_rsa_enc_gcm.pub.result │ │ │ ├── openssh_new_rsa_enc_gcm.result │ │ │ ├── openssh_old_dsa │ │ │ ├── openssh_old_dsa.pub │ │ │ ├── openssh_old_dsa.pub.result │ │ │ ├── openssh_old_dsa.result │ │ │ ├── openssh_old_dsa_enc │ │ │ ├── openssh_old_dsa_enc.pub │ │ │ ├── openssh_old_dsa_enc.pub.result │ │ │ ├── openssh_old_dsa_enc.result │ │ │ ├── openssh_old_ecdsa │ │ │ ├── openssh_old_ecdsa.pub │ │ │ ├── openssh_old_ecdsa.pub.result │ │ │ ├── openssh_old_ecdsa.result │ │ │ ├── openssh_old_ecdsa_enc │ │ │ ├── openssh_old_ecdsa_enc.pub │ │ │ ├── openssh_old_ecdsa_enc.pub.result │ │ │ ├── openssh_old_ecdsa_enc.result │ │ │ ├── openssh_old_rsa │ │ │ ├── openssh_old_rsa.pub │ │ │ ├── openssh_old_rsa.pub.result │ │ │ ├── openssh_old_rsa.result │ │ │ ├── openssh_old_rsa_enc │ │ │ ├── openssh_old_rsa_enc.pub │ │ │ ├── openssh_old_rsa_enc.pub.result │ │ │ ├── openssh_old_rsa_enc.result │ │ │ ├── ppk_dsa_enc │ │ │ ├── ppk_dsa_enc.result │ │ │ ├── ppk_rsa │ │ │ ├── ppk_rsa.result │ │ │ ├── ppk_rsa_enc │ │ │ ├── ppk_rsa_enc.result │ │ │ ├── rfc4716_rsa.pub │ │ │ ├── rfc4716_rsa.pub.result │ │ │ ├── rfc4716_rsa2.pub │ │ │ ├── rfc4716_rsa2.pub.result │ │ │ ├── rfc4716_rsa3.pub │ │ │ ├── rfc4716_rsa3.pub.result │ │ │ ├── rfc4716_rsa4.pub │ │ │ ├── rfc4716_rsa4.pub.result │ │ │ ├── rfc4716_rsa5.pub │ │ │ ├── rfc4716_rsa5.pub.result │ │ │ ├── rfc4716_rsa6.pub │ │ │ └── rfc4716_rsa6.pub.result │ │ │ ├── test-durability-ssh.js │ │ │ ├── test-kexdh.js │ │ │ ├── test-keyparser.js │ │ │ ├── test-packet60.js │ │ │ ├── test-sftp.js │ │ │ ├── test-ssh.js │ │ │ ├── test-utils.js │ │ │ └── test.js │ ├── streamsearch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lib │ │ │ └── sbmh.js │ │ └── package.json │ └── tweetnacl │ │ ├── .npmignore │ │ ├── AUTHORS.md │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ ├── README.md │ │ ├── nacl-fast.js │ │ ├── nacl-fast.min.js │ │ ├── nacl.d.ts │ │ ├── nacl.js │ │ ├── nacl.min.js │ │ └── package.json ├── package-lock.json └── package.json └── template.yaml /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Keith Duncan 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /agent/.dockerignore: -------------------------------------------------------------------------------- 1 | tmp 2 | 3 | target 4 | 5 | .env 6 | 7 | script -------------------------------------------------------------------------------- /agent/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .env 3 | tmp 4 | -------------------------------------------------------------------------------- /agent/.rpm/iam-ssh-agent.spec: -------------------------------------------------------------------------------- 1 | %define __spec_install_post %{nil} 2 | %define __os_install_post %{_dbpath}/brp-compress 3 | %define debug_package %{nil} 4 | 5 | Name: iam-ssh-agent 6 | Summary: ssh-agent compatible daemon that forwards list-keys and sign-data operations to an API Gateway backend, access controlled by the caller's IAM identity. 7 | Version: @@VERSION@@ 8 | Release: @@RELEASE@@ 9 | License: BSD 10 | Group: Applications/System 11 | Source0: %{name}-%{version}.tar.gz 12 | 13 | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root 14 | 15 | %description 16 | %{summary} 17 | 18 | %prep 19 | %setup -q 20 | 21 | %install 22 | rm -rf %{buildroot} 23 | mkdir -p %{buildroot} 24 | cp -a * %{buildroot} 25 | 26 | %clean 27 | rm -rf %{buildroot} 28 | 29 | %files 30 | %defattr(-,root,root,-) 31 | %{_bindir}/* 32 | -------------------------------------------------------------------------------- /agent/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "iam-ssh-agent" 3 | description = "ssh-agent compatible daemon that forwards list-keys and sign-data operations to an API Gateway backend, access controlled by the caller's IAM identity." 4 | version = "0.3.1" 5 | authors = ["Keith Duncan "] 6 | edition = "2018" 7 | repository = "https://github.com/buildkite/iam-ssh-agent" 8 | license = "BSD-3-Clause" 9 | keywords = [ "ssh", "ssh-agent", "aws" ] 10 | categories = [ "command-line-utilities", "development-tools" ] 11 | include = ["/src"] 12 | readme = "README.md" 13 | 14 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 15 | 16 | [dependencies] 17 | ssh-agent = "0.2.1" 18 | clap = "2.33.0" 19 | textwrap = "0.11.0" 20 | rusoto_core = { version = "0.42.0", default_features = false, features=["rustls"] } 21 | url = "2.1.1" 22 | futures = "0.1.29" 23 | serde = { version = "1.0", features = ["derive"] } 24 | serde_json = "1.0.48" 25 | openssh-keys = "0.4.1" 26 | base64 = "0.11.0" 27 | env_logger = "0.7.1" 28 | signal-hook = "0.1.13" 29 | 30 | [package.metadata.rpm.cargo] 31 | buildflags = ["--release"] 32 | 33 | [package.metadata.rpm.targets] 34 | iam-ssh-agent = { path = "/usr/bin/iam-ssh-agent" } 35 | -------------------------------------------------------------------------------- /agent/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.41 AS BUILD 2 | 3 | RUN rustup target add x86_64-unknown-linux-musl 4 | 5 | RUN apt-get update && \ 6 | apt-get install -y \ 7 | musl-tools 8 | 9 | COPY ["src/", "/workspace/src"] 10 | COPY ["Cargo.toml", "Cargo.lock", "/workspace/"] 11 | WORKDIR /workspace 12 | RUN cargo build --release --target x86_64-unknown-linux-musl 13 | 14 | FROM alpine:3.11 15 | 16 | RUN apk add --no-cache ca-certificates 17 | 18 | COPY --from=BUILD /workspace/target/x86_64-unknown-linux-musl/release/iam-ssh-agent bin/ -------------------------------------------------------------------------------- /agent/README.md: -------------------------------------------------------------------------------- 1 | # iam-ssh-agent agent 2 | 3 | Binary replacement for `ssh-agent` that uses an [iam-ssh-agent](https://github.com/buildkite/iam-ssh-agent) 4 | backend for `list keys` and `sign data` operations. 5 | 6 | The artifacts built from this crate are: 7 | 8 | - `iam-ssh-agent.deb` a Debian package, attached to the GitHub Release 9 | - `buildkite/iam-ssh-agent:latest` a Docker image with Alpine base, pushed to Docker Hub -------------------------------------------------------------------------------- /agent/script/client: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec docker run --rm -it --entrypoint bash -v ssh-socket:/ssh --env SSH_AUTH_SOCK=/ssh/socket buildkite/agent 4 | -------------------------------------------------------------------------------- /agent/script/server: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source .env 4 | 5 | exec docker run --rm --volume ssh-socket:/ssh --env RUST_LOG=rusoto=debug,hyper=debug --env IAM_SSH_AGENT_BACKEND_URL --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env AWS_SESSION_TOKEN iam-ssh-agent:latest /bin/iam-ssh-agent daemon --bind-to=/ssh/socket -------------------------------------------------------------------------------- /agent/src/agent.rs: -------------------------------------------------------------------------------- 1 | use ssh_agent::{agent::Agent, proto::{Message, Identity, SignRequest, SignatureBlob}}; 2 | use rusoto_core::{region::Region, RusotoError, Client, signature::SignedRequest}; 3 | use url::Url; 4 | use openssh_keys::PublicKey; 5 | use std::str::FromStr; 6 | 7 | mod service; 8 | 9 | #[derive(Debug)] 10 | pub enum BackendError { 11 | ListIdentities(RusotoError), 12 | Sign(RusotoError), 13 | Unknown(String), 14 | } 15 | 16 | pub struct Backend { 17 | url: Url, 18 | } 19 | 20 | impl Backend { 21 | pub fn new(url: Url) -> Self { 22 | Self { 23 | url, 24 | } 25 | } 26 | 27 | fn region(&self) -> Region { 28 | /* 29 | Endpoint specific public DNS hostname 30 | {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 31 | 32 | Route 53 alias 33 | {rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com 34 | 35 | Private DNS Name 36 | {restapi-id}.execute-api.{region}.amazonaws.com 37 | */ 38 | let domain = self.url.domain().expect("backend URL must be a domain"); 39 | 40 | let domain_labels = domain.split(".").collect::>(); 41 | let region_label = domain_labels.get(2).expect("at least three domain labels"); 42 | 43 | Region::from_str(region_label).expect("domain label is a valid region") 44 | } 45 | 46 | pub fn fetch_identities(&self) -> Result> { 47 | let region = self.region(); 48 | 49 | let mut request = SignedRequest::new("GET", "execute-api", ®ion, &format!("{}/{}", self.url.path(), "identities")); 50 | request.set_hostname(Some(self.url.host_str().expect("url host").to_owned())); 51 | 52 | Client::shared() 53 | .sign_and_dispatch(request, service::parse_http_list_identities) 54 | .sync() 55 | } 56 | 57 | pub fn identities(&self) -> Result, BackendError> { 58 | let identities = self 59 | .fetch_identities() 60 | .map_err(BackendError::ListIdentities)? 61 | .identities 62 | .into_iter() 63 | .filter_map(|identity| { 64 | PublicKey::parse(&identity).ok().map(|key| { 65 | Identity { 66 | pubkey_blob: key.data(), 67 | comment: key.comment.unwrap_or(String::new()), 68 | } 69 | }) 70 | }) 71 | .collect(); 72 | Ok(identities) 73 | } 74 | 75 | pub fn fetch_signature(&self, request: &SignRequest) -> Result> { 76 | let request: service::SignRequest = request.clone().into(); 77 | 78 | let bytes = serde_json::to_vec(&request) 79 | .map_err(|e| RusotoError::ParseError(format!("{:?}", e)))?; 80 | 81 | let region = self.region(); 82 | 83 | let mut request = SignedRequest::new("POST", "execute-api", ®ion, &format!("{}/{}", self.url.path(), "signature")); 84 | request.set_hostname(Some(self.url.host_str().expect("url host").to_owned())); 85 | request.set_payload(Some(bytes)); 86 | request.set_content_type("application/json".to_string()); 87 | 88 | Client::shared() 89 | .sign_and_dispatch(request, service::parse_http_signature) 90 | .sync() 91 | } 92 | 93 | pub fn sign(&self, request: &SignRequest) -> Result { 94 | let signature = self 95 | .fetch_signature(request) 96 | .map_err(BackendError::Sign)? 97 | .into(); 98 | Ok(signature) 99 | } 100 | } 101 | 102 | impl Agent for Backend { 103 | type Error = BackendError; 104 | 105 | fn handle(&self, request: Message) -> Result { 106 | match request { 107 | Message::RequestIdentities => { 108 | eprintln!("at=list_identities"); 109 | Ok(Message::IdentitiesAnswer(self.identities()?)) 110 | }, 111 | Message::SignRequest(request) => { 112 | eprintln!("at=sign"); 113 | Ok(Message::SignResponse(self.sign(&request)?)) 114 | }, 115 | _ => { 116 | Err(BackendError::Unknown(format!("received unsupported message: {:?}", request))) 117 | }, 118 | } 119 | } 120 | } -------------------------------------------------------------------------------- /agent/src/agent/service.rs: -------------------------------------------------------------------------------- 1 | use rusoto_core::{RusotoError, request::{HttpResponse, BufferedHttpResponse}}; 2 | use ssh_agent::proto::SignatureBlob; 3 | use futures::future::Future; 4 | use serde::{Deserialize, Serialize}; 5 | 6 | #[derive(Debug, Deserialize)] 7 | pub struct ListIdentities { 8 | pub identities: Vec, 9 | } 10 | 11 | #[derive(Debug)] 12 | pub enum ListIdentitiesError { 13 | 14 | } 15 | 16 | mod base64 { 17 | use serde::Deserialize; 18 | 19 | pub fn serialize(vec: &Vec, serializer: S) -> Result 20 | where 21 | S: serde::Serializer 22 | { 23 | serializer.serialize_str(&base64::encode(&vec[..])) 24 | } 25 | 26 | pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> 27 | where 28 | D: serde::Deserializer<'de> 29 | { 30 | let s = <&str>::deserialize(deserializer)?; 31 | base64::decode(s).map_err(serde::de::Error::custom) 32 | } 33 | } 34 | 35 | #[derive(Debug, Serialize)] 36 | pub struct SignRequest { 37 | #[serde(with = "base64")] 38 | pubkey: Vec, 39 | #[serde(with = "base64")] 40 | data: Vec, 41 | flags: u32, 42 | } 43 | 44 | impl From for SignRequest { 45 | fn from(req: super::SignRequest) -> Self { 46 | SignRequest { 47 | pubkey: req.pubkey_blob, 48 | data: req.data, 49 | flags: req.flags, 50 | } 51 | } 52 | } 53 | 54 | #[derive(Debug, Deserialize)] 55 | pub struct Signature { 56 | #[serde(with = "base64")] 57 | signature: Vec, 58 | } 59 | 60 | #[derive(Debug)] 61 | pub enum SignError { 62 | 63 | } 64 | 65 | impl Into for Signature { 66 | fn into(self) -> SignatureBlob { 67 | self.signature 68 | } 69 | } 70 | 71 | pub fn parse_http_list_identities(response: HttpResponse) -> Box> + Send> { 72 | Box::new(response.buffer().map_err(RusotoError::HttpDispatch).and_then(|buffered: BufferedHttpResponse| { 73 | eprintln!("mod=service fn=parse_http_list_identities response={:?}", buffered); 74 | 75 | match serde_json::from_slice(&buffered.body) { 76 | Ok(p) => Box::new(futures::future::ok(p)), 77 | Err(e) => Box::new(futures::future::err(RusotoError::ParseError(format!("{:?}", e)))), 78 | } 79 | })) 80 | } 81 | 82 | pub fn parse_http_signature(response: HttpResponse) -> Box> + Send> { 83 | Box::new(response.buffer().map_err(RusotoError::HttpDispatch).and_then(|buffered: BufferedHttpResponse| { 84 | eprintln!("mod=service fn=parse_http_signature response={:?}", buffered); 85 | 86 | match serde_json::from_slice(&buffered.body) { 87 | Ok(p) => Box::new(futures::future::ok(p)), 88 | Err(e) => Box::new(futures::future::err(RusotoError::ParseError(format!("{:?}", e)))), 89 | } 90 | })) 91 | } -------------------------------------------------------------------------------- /agent/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{env, fs, path::Path}; 2 | use ssh_agent::agent::Agent; 3 | use clap::{App, Arg, SubCommand}; 4 | use url::Url; 5 | 6 | mod agent; 7 | 8 | fn main() { 9 | let _ = env_logger::try_init(); 10 | 11 | unsafe { 12 | signal_hook::register(signal_hook::SIGTERM, || std::process::exit(0)).expect("register SIGTERM handler"); 13 | signal_hook::register(signal_hook::SIGINT, || std::process::abort()).expect("register SIGINT handler"); 14 | } 15 | 16 | let about = env!("CARGO_PKG_DESCRIPTION").to_owned() + "\n\nAll commands require the IAM_SSH_AGENT_BACKEND_URL environment variable to be set e.g. https://${ApiId}.execute-api.${Region}.amazonaws.com/${Stage}"; 17 | let about = textwrap::fill(&about, 80); 18 | 19 | let matches = App::new(env!("CARGO_PKG_NAME")) 20 | .version(env!("CARGO_PKG_VERSION")) 21 | .author(env!("CARGO_PKG_AUTHORS")) 22 | .about(about.as_str()) 23 | .subcommand(SubCommand::with_name("list-keys") 24 | .about("List all keys for the caller's IAM identity.")) 25 | .subcommand(SubCommand::with_name("daemon") 26 | .about("Run the daemon, bind a UNIX domain socket to provide ssh list and sign operations. Defaults to SSH_AUTH_SOCK if unspecified.") 27 | .arg(Arg::with_name("bind-to") 28 | .long("bind-to") 29 | .short("b") 30 | .takes_value(true) 31 | .value_name("PATH"))) 32 | .setting(clap::AppSettings::SubcommandRequired) 33 | .get_matches(); 34 | 35 | // Uses an environment variable rather than an argument so that this can be 36 | // an ECS ValueFrom in an ECS task. 37 | let ssh_agent_backend_url = Url::parse(&env::var("IAM_SSH_AGENT_BACKEND_URL").expect("IAM_SSH_AGENT_BACKEND_URL is required")).expect("IAM_SSH_AGENT_BACKEND_URL is a valid url"); 38 | let agent = agent::Backend::new(ssh_agent_backend_url); 39 | 40 | if let Some(_matches) = matches.subcommand_matches("list-keys") { 41 | eprintln!("{:#?}", agent.identities()); 42 | return; 43 | } 44 | 45 | if let Some(matches) = matches.subcommand_matches("daemon") { 46 | // TODO support exec mode and export SSH_AUTH_SOCK 47 | 48 | // Support command line for testing and an environment variable for 49 | // systemd units. 50 | let pipe = matches.value_of("bind-to").expect("bind-to is required"); 51 | let pipe = Path::new(pipe); 52 | 53 | if fs::metadata(&pipe).is_ok() { 54 | if let Ok(_) = fs::remove_file(&pipe) { 55 | println!("fn=main pipe={} at=deleted", pipe.display()); 56 | } 57 | } 58 | 59 | eprintln!("fn=main pipe={} at=bind", pipe.display()); 60 | 61 | match agent.run_unix(&pipe) { 62 | Err(e) => eprintln!("fn=main pipe={} at=bind err={:?}", pipe.display(), e), 63 | Ok(_) => {}, 64 | } 65 | 66 | eprintln!("fn=main pipe={} at=finished", pipe.display()); 67 | 68 | std::process::exit(1); 69 | } 70 | 71 | unreachable!() 72 | } 73 | -------------------------------------------------------------------------------- /agent/tmp/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buildkite/iam-ssh-agent/1488b3a3568669dc5291c881625766398ed5eaac/agent/tmp/.gitkeep -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # client 2 | 3 | Use the [ssh-agent](https://www.npmjs.com/package/ssh-agent) npm package as an 4 | SSH Agent client for testing the IAM SSH Agent against the stock ssh-agent 5 | implementation. 6 | 7 | ## Installation 8 | 9 | ``` 10 | npm install 11 | ``` 12 | 13 | ## Prepare Agents 14 | 15 | Run two agents side by side with these commands in separate sessions: 16 | 17 | ``` 18 | cd ../agent && aws-vault exec [aws profile] -- cargo run --quiet -- --bind-to=tmp/iam 19 | ssh-agent -d -a ../agent/tmp/original 20 | ``` 21 | 22 | ## List Keys 23 | 24 | ``` 25 | export SSH_AUTH_SOCK=path/to/sock 26 | ./node_modules/ssh-agent/bin/ssha-list 27 | ``` 28 | 29 | ## Sign Data 30 | 31 | ``` 32 | export SSH_AUTH_SOCK=path/to/sock 33 | ./node_modules/ssh-agent/bin/ssha-sign [key name from list keys] < <(echo data) 34 | ``` 35 | -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ctype": { 8 | "version": "0.5.4", 9 | "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.4.tgz", 10 | "integrity": "sha1-XP/7wmZELOihI5pfNwkaCFt6Pm4=" 11 | }, 12 | "posix-getopt": { 13 | "version": "1.1.0", 14 | "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.1.0.tgz", 15 | "integrity": "sha1-jiWKyo801pBsFZoysDiDYBl+Vpg=" 16 | }, 17 | "ssh-agent": { 18 | "version": "0.2.4", 19 | "resolved": "https://registry.npmjs.org/ssh-agent/-/ssh-agent-0.2.4.tgz", 20 | "integrity": "sha1-GBVDY5Xd2FLNgBx7RH1Ef8VzvZQ=", 21 | "requires": { 22 | "ctype": "0.5.4", 23 | "posix-getopt": "1.1.0" 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "dependencies": { 10 | "ssh-agent": "0.2.4" 11 | }, 12 | "author": "", 13 | "license": "ISC" 14 | } 15 | -------------------------------------------------------------------------------- /images/protocol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buildkite/iam-ssh-agent/1488b3a3568669dc5291c881625766398ed5eaac/images/protocol.png -------------------------------------------------------------------------------- /images/protocol.txt: -------------------------------------------------------------------------------- 1 | # https://sequencediagram.org 2 | 3 | title git clone with iam-ssh-agent 4 | 5 | git+ssh clone->(1)github.com:connect 6 | git+ssh clone(1)<-github.com:publickey auth 7 | git+ssh clone->(1)iam-ssh-agent binary: list-identities 8 | note over iam-ssh-agent binary,iam-ssh-agent backend:Requests signed with AWS IAM Credentials 9 | iam-ssh-agent binary->(1)iam-ssh-agent backend: list-identities 10 | #iam-ssh-agent backend->(1)DynamoDB: get ssh identities for caller 11 | #iam-ssh-agent backend(1)<-DynamoDB: identities 12 | #iam-ssh-agent backend->(1)AWS SSM Parameter Store: get public key parameters 13 | #iam-ssh-agent backend(1)<-AWS SSM Parameter Store: public key parameters 14 | iam-ssh-agent binary(1)<-iam-ssh-agent backend: public keys 15 | git+ssh clone(1)<-iam-ssh-agent binary: public keys 16 | git+ssh clone->(1)github.com: try public key 17 | git+ssh clone(1)<-github.com: public key accepted, sign this data 18 | git+ssh clone->(1)iam-ssh-agent binary: sign-data for public key 19 | iam-ssh-agent binary->(1)iam-ssh-agent backend: sign-data for public key 20 | #iam-ssh-agent backend->(1)DynamoDB: get ssh identities for caller 21 | #iam-ssh-agent backend(1)<-DynamoDB: identities 22 | #iam-ssh-agent backend->(1)AWS SSM Parameter Store: get + decrypt private key parameter for public key 23 | #iam-ssh-agent backend(1)<-AWS SSM Parameter Store: private key 24 | note right of iam-ssh-agent backend: ssh private key doesn't\nleave the service 25 | iam-ssh-agent binary(1)<-iam-ssh-agent backend: signature 26 | git+ssh clone(1)<-iam-ssh-agent binary: signature 27 | git+ssh clone->(1)github.com: signature 28 | git+ssh clone(1)<-github.com: authenticated -------------------------------------------------------------------------------- /service/.gitignore: -------------------------------------------------------------------------------- 1 | samconfig.toml 2 | packaged.yml -------------------------------------------------------------------------------- /service/README.md: -------------------------------------------------------------------------------- 1 | # iam-ssh-agent service 2 | 3 | The `service` project is an AWS SAM template that deploys an API Gateway, 4 | Lambdas, and a DynamoDB table. 5 | 6 | ## Deploying 7 | 8 | The template can be deployed using the AWS Serverless Application Repository or 9 | the [AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-reference.html#serverless-sam-cli). 10 | 11 | You can choose whether to deploy the service to the same account as your CI 12 | workload or to a separate account. 13 | 14 | You can also choose whether to create a Regional or Private endpoint. A 15 | Regional endpoint can be accessed from anywhere (including the public Internet), 16 | while a Private endpoint can only be accessed from a VPC using a VPC Endpoint. 17 | Access to a Regional endpoint can be restricted by AWS Account ID, while a 18 | Private endpoint allows fine-grained restriction by source VPC or VPC Endpoint. 19 | 20 | ### Deploy from the AWS Serverless Application Repository web console 21 | 22 | [![Deploy AWS Serverless Application](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:832577133680:applications~iam-ssh-agent) 23 | 24 | Open the application in AWS Console and click Deploy, fill in the parameters 25 | as described below for a CLI deployment. 26 | 27 | ### Deploy using the Serverless Application Model on the command line 28 | 29 | The AWS SAM CLI is an extension of the AWS CLI that adds functionality for 30 | building and testing Lambda applications. 31 | 32 | Before continuing, [install the AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) if not already installed. The following 33 | instructions were written using SAM Version 0.43.0. 34 | 35 | To deploy `iam-ssh-agent` for the first time, authenticate with AWS and run the 36 | following command from the `service` directory: 37 | 38 | ```bash 39 | iam-ssh-agent$ sam deploy --guided 40 | ``` 41 | 42 | You will be prompted for the following parameter values: 43 | 44 | * **Stack Name**: AWS will create a CloudFormation Stack using this name, use 45 | something descriptive like `iam-ssh-agent`. 46 | * **AWS Region**: The AWS region you want to deploy this instance of 47 | `iam-ssh-agent`. 48 | * **Parameter Endpoint Configuration**: Select REGIONAL or PRIVATE. 49 | * **Parameter AccountIds**: Limit access based on the account of the calling IAM 50 | entities, this is recommended for REGIONAL endpoint configurations. You can 51 | enter multiple AWS Account IDs, separated by commas. 52 | * **Parameter SourceVpcIds**: Limit access based on the source VPC or VPC 53 | Endpoint of the calling IAM entities, this is only available for PRIVATE 54 | endpoint configurations. 55 | 56 | Once the deployment is complete, `sam` will print the URL of the API Gateway and 57 | the name of the DynamoDB permissions table. You can now add [keys](../README.md#adding-keys) 58 | and [permissions](../README.md#granting-access-to-keys) to your agent backend. 59 | -------------------------------------------------------------------------------- /service/README_SAR.md: -------------------------------------------------------------------------------- 1 | # iam-ssh-agent 2 | 3 | A replacement ssh-agent that uses the caller's IAM identity to access a list of 4 | permitted ssh identities. 5 | 6 | `iam-ssh-agent` is designed to be used in less trusted continuous integration 7 | environments where you want to use an ssh key to clone source control 8 | repositories without granting access to the raw key material. 9 | 10 | `iam-ssh-agent` is split into two components: a binary that binds a unix domain 11 | socket with the ssh-agent protocol, and a serverless API that uses API Gateway 12 | and Lambda functions to answer `list keys` and `sign data` requests. 13 | 14 | See the [GitHub repository](https://github.com/buildkite/iam-ssh-agent) for 15 | more documentation. -------------------------------------------------------------------------------- /service/ssh-agent-backend/.npmignore: -------------------------------------------------------------------------------- 1 | tests/* 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/GetSignature.js: -------------------------------------------------------------------------------- 1 | const AWS = require('aws-sdk'); 2 | 3 | const lib = require('./lib.js'); 4 | const ssh2 = require('./node_modules/ssh2-streams/index.js'); 5 | const crypto = require('crypto'); 6 | 7 | async function fetchPrivateKeyForParameter(keyParameter) { 8 | let ssm = new AWS.SSM({apiVersion: '2014-11-06'}); 9 | 10 | let response = await ssm.getParameter({ 11 | Name: keyParameter, 12 | WithDecryption: true, 13 | }).promise(); 14 | 15 | return response.Parameter.Value; 16 | } 17 | 18 | exports.handler = async (event, context) => { 19 | try { 20 | console.log(`fn=handler event=${JSON.stringify(event)}`); 21 | 22 | let identity = event.requestContext.identity; 23 | let [caller,_] = identity.caller.split(":"); 24 | console.log(`fn=handler caller=${caller}`); 25 | 26 | let { pubkey, data, flags } = JSON.parse(event.body); 27 | 28 | let decodedPubkey = Buffer.from(pubkey, 'base64'); 29 | let decodedData = Buffer.from(data, 'base64'); 30 | 31 | // Find the parameter that stores the private/public key pair for blob 32 | // searching the list of keys the caller has access to. 33 | let keyParameterList = await lib.fetchKeyParameterListForCaller(caller); 34 | console.log(`fn=handler caller=${caller} keys=${keyParameterList.join(',')}`); 35 | 36 | let parameters = await lib.fetchPublicKeyParameters(keyParameterList); 37 | 38 | for (const parameter of parameters) { 39 | let parsedKey = ssh2.utils.parseKey(parameter.Value); 40 | 41 | // pubkey is base64(pubkey bits) 42 | // decoded_pubkey is binary key bits 43 | // 44 | // key is a string rep of the public key with comment etc 45 | // parsed_key is an OpenSSH key from ssh2-streams 46 | if (!decodedPubkey.equals(parsedKey.getPublicSSH())) { 47 | console.log(`fn=handler caller=${caller} key=${parameter.Name} at=skip`); 48 | continue; 49 | } 50 | console.log(`fn=handler caller=${caller} key=${parameter.Name} at=match`); 51 | 52 | // Depending on the parameter contents ssh2.utils.parseKey might 53 | // return a single key or a list of keys. We only support one. 54 | let privateKey = [].concat(ssh2.utils.parseKey(await fetchPrivateKeyForParameter(parameter.Name)))[0]; 55 | 56 | var signatureBlob; 57 | if (privateKey.type == "ssh-rsa") { 58 | if (flags == 2) { 59 | // SSH_AGENT_RSA_SHA2_256 60 | signatureBlob = [Buffer.from('rsa-sha2-256'), crypto.sign('sha256', decodedData, privateKey.getPrivatePEM())]; 61 | } else if (flags == 4) { 62 | // SSH_AGENT_RSA_SHA2_512 63 | signatureBlob = [Buffer.from('rsa-sha2-512'), crypto.sign('sha512', decodedData, privateKey.getPrivatePEM())]; 64 | } else { 65 | // SSH_AGENT_RSA_SHA1 66 | signatureBlob = [Buffer.from('ssh-rsa'), crypto.sign('sha1', decodedData, privateKey.getPrivatePEM())]; 67 | } 68 | } else { 69 | signatureBlob = [Buffer.from(privateKey.type), privateKey.sign(decodedData)]; 70 | } 71 | 72 | let typeLength = Buffer.alloc(4); 73 | typeLength.writeUInt32BE(signatureBlob[0].length); 74 | 75 | let sigLength = Buffer.alloc(4); 76 | sigLength.writeUInt32BE(signatureBlob[1].length); 77 | 78 | let encodedSignature = Buffer.concat([typeLength, signatureBlob[0], sigLength, signatureBlob[1]]).toString('base64'); 79 | 80 | console.log(`fn=handler caller=${caller} key=${parameter.Name} signature=${encodedSignature}`); 81 | 82 | return { 83 | 'statusCode': 200, 84 | 'body': JSON.stringify({ 85 | signature: encodedSignature, 86 | }), 87 | } 88 | } 89 | 90 | return { 91 | 'statusCode': 404, 92 | 'body': JSON.stringify({ 93 | message: "key blob not found in list of keys caller has access to", 94 | }) 95 | } 96 | } catch (err) { 97 | console.log(err); 98 | return err; 99 | } 100 | }; 101 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/ListIdentities.js: -------------------------------------------------------------------------------- 1 | const AWS = require('aws-sdk'); 2 | 3 | const lib = require('./lib.js'); 4 | 5 | exports.handler = async (event, context) => { 6 | try { 7 | let identity = event.requestContext.identity; 8 | let [caller,_] = identity.caller.split(":"); 9 | console.log(`fn=handler caller=${caller}`); 10 | 11 | let keyParameterList = await lib.fetchKeyParameterListForCaller(caller); 12 | console.log(`fn=handler caller=${caller} keys=${keyParameterList.join(',')}`); 13 | 14 | let keys = await lib.fetchPublicKeyParameters(keyParameterList); 15 | 16 | return { 17 | 'statusCode': 200, 18 | 'body': JSON.stringify({ 19 | identities: keys.map(parameter => parameter.Value), 20 | }) 21 | } 22 | } catch (err) { 23 | console.log(err); 24 | return err; 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/lib.js: -------------------------------------------------------------------------------- 1 | const AWS = require('aws-sdk'); 2 | 3 | exports.fetchKeyParameterListForCaller = async (caller) => { 4 | let dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); 5 | 6 | let response = await dynamodb.getItem({ 7 | TableName: process.env.KEY_PERMISSIONS_TABLE_NAME, 8 | Key: { 9 | "IamEntityUniqueId": { 10 | S: caller, 11 | } 12 | }, 13 | AttributesToGet: [ 14 | "Parameters", 15 | ], 16 | }).promise(); 17 | 18 | let item = response.Item; 19 | if (item == undefined) { 20 | return []; 21 | } 22 | 23 | let parameters = item.Parameters; 24 | if (parameters == undefined) { 25 | return []; 26 | } 27 | 28 | return parameters.SS; 29 | }; 30 | 31 | function replaceKeyCommentWithParameterArn(key, arn) { 32 | let components = key.split(' '); 33 | if (components.length == 3) { 34 | components.pop(); 35 | } 36 | components.push(arn); 37 | 38 | return components.join(' '); 39 | } 40 | 41 | function chunkArrayInGroups(arr, chunkSize) { 42 | var groups = [], i; 43 | for (i = 0; i < arr.length; i += chunkSize) { 44 | groups.push(arr.slice(i, i + chunkSize)); 45 | } 46 | return groups; 47 | } 48 | 49 | exports.fetchPublicKeyParameters = async (keyParameters) => { 50 | let ssm = new AWS.SSM({apiVersion: '2014-11-06'}); 51 | 52 | // Fetch up to 10 parameters at a time 53 | var groups = chunkArrayInGroups(keyParameters.map(keyParameter => `${keyParameter}.pub`), 10); 54 | 55 | let responses = await Promise.all(groups.map(async (keyParameters) => { 56 | let response = await ssm.getParameters({ 57 | Names: keyParameters, 58 | }).promise(); 59 | 60 | return response.Parameters; 61 | })); 62 | 63 | return responses 64 | .flat() 65 | .map((parameter) => { 66 | return { 67 | // Transform the public key paramter name back to the private key parameter name 68 | Name: parameter.Name.slice(0, -4), 69 | Value: replaceKeyCommentWithParameterArn(parameter.Value, parameter.ARN), 70 | } 71 | }); 72 | }; 73 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Mark Cavage, All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE 20 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/README.md: -------------------------------------------------------------------------------- 1 | node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. 2 | Currently BER encoding is supported; at some point I'll likely have to do DER. 3 | 4 | ## Usage 5 | 6 | Mostly, if you're *actually* needing to read and write ASN.1, you probably don't 7 | need this readme to explain what and why. If you have no idea what ASN.1 is, 8 | see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc 9 | 10 | The source is pretty much self-explanatory, and has read/write methods for the 11 | common types out there. 12 | 13 | ### Decoding 14 | 15 | The following reads an ASN.1 sequence with a boolean. 16 | 17 | var Ber = require('asn1').Ber; 18 | 19 | var reader = new Ber.Reader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff])); 20 | 21 | reader.readSequence(); 22 | console.log('Sequence len: ' + reader.length); 23 | if (reader.peek() === Ber.Boolean) 24 | console.log(reader.readBoolean()); 25 | 26 | ### Encoding 27 | 28 | The following generates the same payload as above. 29 | 30 | var Ber = require('asn1').Ber; 31 | 32 | var writer = new Ber.Writer(); 33 | 34 | writer.startSequence(); 35 | writer.writeBoolean(true); 36 | writer.endSequence(); 37 | 38 | console.log(writer.buffer); 39 | 40 | ## Installation 41 | 42 | npm install asn1 43 | 44 | ## License 45 | 46 | MIT. 47 | 48 | ## Bugs 49 | 50 | See . 51 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/lib/ber/errors.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Mark Cavage All rights reserved. 2 | 3 | 4 | module.exports = { 5 | 6 | newInvalidAsn1Error: function (msg) { 7 | var e = new Error(); 8 | e.name = 'InvalidAsn1Error'; 9 | e.message = msg || ''; 10 | return e; 11 | } 12 | 13 | }; 14 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/lib/ber/index.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Mark Cavage All rights reserved. 2 | 3 | var errors = require('./errors'); 4 | var types = require('./types'); 5 | 6 | var Reader = require('./reader'); 7 | var Writer = require('./writer'); 8 | 9 | 10 | // --- Exports 11 | 12 | module.exports = { 13 | 14 | Reader: Reader, 15 | 16 | Writer: Writer 17 | 18 | }; 19 | 20 | for (var t in types) { 21 | if (types.hasOwnProperty(t)) 22 | module.exports[t] = types[t]; 23 | } 24 | for (var e in errors) { 25 | if (errors.hasOwnProperty(e)) 26 | module.exports[e] = errors[e]; 27 | } 28 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/lib/ber/types.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Mark Cavage All rights reserved. 2 | 3 | 4 | module.exports = { 5 | EOC: 0, 6 | Boolean: 1, 7 | Integer: 2, 8 | BitString: 3, 9 | OctetString: 4, 10 | Null: 5, 11 | OID: 6, 12 | ObjectDescriptor: 7, 13 | External: 8, 14 | Real: 9, // float 15 | Enumeration: 10, 16 | PDV: 11, 17 | Utf8String: 12, 18 | RelativeOID: 13, 19 | Sequence: 16, 20 | Set: 17, 21 | NumericString: 18, 22 | PrintableString: 19, 23 | T61String: 20, 24 | VideotexString: 21, 25 | IA5String: 22, 26 | UTCTime: 23, 27 | GeneralizedTime: 24, 28 | GraphicString: 25, 29 | VisibleString: 26, 30 | GeneralString: 28, 31 | UniversalString: 29, 32 | CharacterString: 30, 33 | BMPString: 31, 34 | Constructor: 32, 35 | Context: 128 36 | }; 37 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/lib/index.js: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Mark Cavage All rights reserved. 2 | 3 | // If you have no idea what ASN.1 or BER is, see this: 4 | // ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc 5 | 6 | var Ber = require('./ber/index'); 7 | 8 | 9 | 10 | // --- Exported API 11 | 12 | module.exports = { 13 | 14 | Ber: Ber, 15 | 16 | BerReader: Ber.Reader, 17 | 18 | BerWriter: Ber.Writer 19 | 20 | }; 21 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/asn1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "asn1@~0.2.0", 3 | "_id": "asn1@0.2.4", 4 | "_inBundle": false, 5 | "_integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 6 | "_location": "/asn1", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "asn1@~0.2.0", 12 | "name": "asn1", 13 | "escapedName": "asn1", 14 | "rawSpec": "~0.2.0", 15 | "saveSpec": null, 16 | "fetchSpec": "~0.2.0" 17 | }, 18 | "_requiredBy": [ 19 | "/ssh2-streams" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 22 | "_shasum": "8d2475dfab553bb33e77b54e59e880bb8ce23136", 23 | "_spec": "asn1@~0.2.0", 24 | "_where": "/workspace/ssh-agent-backend/node_modules/ssh2-streams", 25 | "author": { 26 | "name": "Joyent", 27 | "url": "joyent.com" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/joyent/node-asn1/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "contributors": [ 34 | { 35 | "name": "Mark Cavage", 36 | "email": "mcavage@gmail.com" 37 | }, 38 | { 39 | "name": "David Gwynne", 40 | "email": "loki@animata.net" 41 | }, 42 | { 43 | "name": "Yunong Xiao", 44 | "email": "yunong@joyent.com" 45 | }, 46 | { 47 | "name": "Alex Wilson", 48 | "email": "alex.wilson@joyent.com" 49 | } 50 | ], 51 | "dependencies": { 52 | "safer-buffer": "~2.1.0" 53 | }, 54 | "deprecated": false, 55 | "description": "Contains parsers and serializers for ASN.1 (currently BER only)", 56 | "devDependencies": { 57 | "eslint": "2.13.1", 58 | "eslint-plugin-joyent": "~1.3.0", 59 | "faucet": "0.0.1", 60 | "istanbul": "^0.3.6", 61 | "tape": "^3.5.0" 62 | }, 63 | "homepage": "https://github.com/joyent/node-asn1#readme", 64 | "license": "MIT", 65 | "main": "lib/index.js", 66 | "name": "asn1", 67 | "repository": { 68 | "type": "git", 69 | "url": "git://github.com/joyent/node-asn1.git" 70 | }, 71 | "scripts": { 72 | "test": "tape ./test/ber/*.test.js" 73 | }, 74 | "version": "0.2.4" 75 | } 76 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/bcrypt-pbkdf/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new 4 | changes. Anyone can submit changes. To get started, see the [cr.joyent.us user 5 | guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). 6 | This repo does not use GitHub pull requests. 7 | 8 | See the [Joyent Engineering 9 | Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general 10 | best practices expected in this repository. 11 | 12 | If you're changing something non-trivial or user-facing, you may want to submit 13 | an issue first. 14 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/bcrypt-pbkdf/LICENSE: -------------------------------------------------------------------------------- 1 | The Blowfish portions are under the following license: 2 | 3 | Blowfish block cipher for OpenBSD 4 | Copyright 1997 Niels Provos 5 | All rights reserved. 6 | 7 | Implementation advice by David Mazieres . 8 | 9 | Redistribution and use in source and binary forms, with or without 10 | modification, are permitted provided that the following conditions 11 | are met: 12 | 1. Redistributions of source code must retain the above copyright 13 | notice, this list of conditions and the following disclaimer. 14 | 2. Redistributions in binary form must reproduce the above copyright 15 | notice, this list of conditions and the following disclaimer in the 16 | documentation and/or other materials provided with the distribution. 17 | 3. The name of the author may not be used to endorse or promote products 18 | derived from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | 31 | 32 | 33 | The bcrypt_pbkdf portions are under the following license: 34 | 35 | Copyright (c) 2013 Ted Unangst 36 | 37 | Permission to use, copy, modify, and distribute this software for any 38 | purpose with or without fee is hereby granted, provided that the above 39 | copyright notice and this permission notice appear in all copies. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 42 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 43 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 44 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 45 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 46 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 47 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 48 | 49 | 50 | 51 | Performance improvements (Javascript-specific): 52 | 53 | Copyright 2016, Joyent Inc 54 | Author: Alex Wilson 55 | 56 | Permission to use, copy, modify, and distribute this software for any 57 | purpose with or without fee is hereby granted, provided that the above 58 | copyright notice and this permission notice appear in all copies. 59 | 60 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 61 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 62 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 63 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 64 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 65 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 66 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 67 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/bcrypt-pbkdf/README.md: -------------------------------------------------------------------------------- 1 | Port of the OpenBSD `bcrypt_pbkdf` function to pure Javascript. `npm`-ified 2 | version of [Devi Mandiri's port](https://github.com/devi/tmp/blob/master/js/bcrypt_pbkdf.js), 3 | with some minor performance improvements. The code is copied verbatim (and 4 | un-styled) from Devi's work. 5 | 6 | This product includes software developed by Niels Provos. 7 | 8 | ## API 9 | 10 | ### `bcrypt_pbkdf.pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds)` 11 | 12 | Derive a cryptographic key of arbitrary length from a given password and salt, 13 | using the OpenBSD `bcrypt_pbkdf` function. This is a combination of Blowfish and 14 | SHA-512. 15 | 16 | See [this article](http://www.tedunangst.com/flak/post/bcrypt-pbkdf) for 17 | further information. 18 | 19 | Parameters: 20 | 21 | * `pass`, a Uint8Array of length `passlen` 22 | * `passlen`, an integer Number 23 | * `salt`, a Uint8Array of length `saltlen` 24 | * `saltlen`, an integer Number 25 | * `key`, a Uint8Array of length `keylen`, will be filled with output 26 | * `keylen`, an integer Number 27 | * `rounds`, an integer Number, number of rounds of the PBKDF to run 28 | 29 | ### `bcrypt_pbkdf.hash(sha2pass, sha2salt, out)` 30 | 31 | Calculate a Blowfish hash, given SHA2-512 output of a password and salt. Used as 32 | part of the inner round function in the PBKDF. 33 | 34 | Parameters: 35 | 36 | * `sha2pass`, a Uint8Array of length 64 37 | * `sha2salt`, a Uint8Array of length 64 38 | * `out`, a Uint8Array of length 32, will be filled with output 39 | 40 | ## License 41 | 42 | This source form is a 1:1 port from the OpenBSD `blowfish.c` and `bcrypt_pbkdf.c`. 43 | As a result, it retains the original copyright and license. The two files are 44 | under slightly different (but compatible) licenses, and are here combined in 45 | one file. For each of the full license texts see `LICENSE`. 46 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/bcrypt-pbkdf/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "bcrypt-pbkdf@^1.0.2", 3 | "_id": "bcrypt-pbkdf@1.0.2", 4 | "_inBundle": false, 5 | "_integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 6 | "_location": "/bcrypt-pbkdf", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "bcrypt-pbkdf@^1.0.2", 12 | "name": "bcrypt-pbkdf", 13 | "escapedName": "bcrypt-pbkdf", 14 | "rawSpec": "^1.0.2", 15 | "saveSpec": null, 16 | "fetchSpec": "^1.0.2" 17 | }, 18 | "_requiredBy": [ 19 | "/ssh2-streams" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 22 | "_shasum": "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e", 23 | "_spec": "bcrypt-pbkdf@^1.0.2", 24 | "_where": "/workspace/ssh-agent-backend/node_modules/ssh2-streams", 25 | "bugs": { 26 | "url": "https://github.com/joyent/node-bcrypt-pbkdf/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "dependencies": { 30 | "tweetnacl": "^0.14.3" 31 | }, 32 | "deprecated": false, 33 | "description": "Port of the OpenBSD bcrypt_pbkdf function to pure JS", 34 | "devDependencies": {}, 35 | "homepage": "https://github.com/joyent/node-bcrypt-pbkdf#readme", 36 | "license": "BSD-3-Clause", 37 | "main": "index.js", 38 | "name": "bcrypt-pbkdf", 39 | "repository": { 40 | "type": "git", 41 | "url": "git://github.com/joyent/node-bcrypt-pbkdf.git" 42 | }, 43 | "version": "1.0.2" 44 | } 45 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/safer-buffer/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nikita Skovoroda 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/safer-buffer/dangerous.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable node/no-deprecated-api */ 2 | 3 | 'use strict' 4 | 5 | var buffer = require('buffer') 6 | var Buffer = buffer.Buffer 7 | var safer = require('./safer.js') 8 | var Safer = safer.Buffer 9 | 10 | var dangerous = {} 11 | 12 | var key 13 | 14 | for (key in safer) { 15 | if (!safer.hasOwnProperty(key)) continue 16 | dangerous[key] = safer[key] 17 | } 18 | 19 | var Dangereous = dangerous.Buffer = {} 20 | 21 | // Copy Safer API 22 | for (key in Safer) { 23 | if (!Safer.hasOwnProperty(key)) continue 24 | Dangereous[key] = Safer[key] 25 | } 26 | 27 | // Copy those missing unsafe methods, if they are present 28 | for (key in Buffer) { 29 | if (!Buffer.hasOwnProperty(key)) continue 30 | if (Dangereous.hasOwnProperty(key)) continue 31 | Dangereous[key] = Buffer[key] 32 | } 33 | 34 | if (!Dangereous.allocUnsafe) { 35 | Dangereous.allocUnsafe = function (size) { 36 | if (typeof size !== 'number') { 37 | throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 38 | } 39 | if (size < 0 || size >= 2 * (1 << 30)) { 40 | throw new RangeError('The value "' + size + '" is invalid for option "size"') 41 | } 42 | return Buffer(size) 43 | } 44 | } 45 | 46 | if (!Dangereous.allocUnsafeSlow) { 47 | Dangereous.allocUnsafeSlow = function (size) { 48 | if (typeof size !== 'number') { 49 | throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 50 | } 51 | if (size < 0 || size >= 2 * (1 << 30)) { 52 | throw new RangeError('The value "' + size + '" is invalid for option "size"') 53 | } 54 | return buffer.SlowBuffer(size) 55 | } 56 | } 57 | 58 | module.exports = dangerous 59 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/safer-buffer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "safer-buffer@~2.1.0", 3 | "_id": "safer-buffer@2.1.2", 4 | "_inBundle": false, 5 | "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 6 | "_location": "/safer-buffer", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "safer-buffer@~2.1.0", 12 | "name": "safer-buffer", 13 | "escapedName": "safer-buffer", 14 | "rawSpec": "~2.1.0", 15 | "saveSpec": null, 16 | "fetchSpec": "~2.1.0" 17 | }, 18 | "_requiredBy": [ 19 | "/asn1" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 22 | "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a", 23 | "_spec": "safer-buffer@~2.1.0", 24 | "_where": "/workspace/ssh-agent-backend/node_modules/asn1", 25 | "author": { 26 | "name": "Nikita Skovoroda", 27 | "email": "chalkerx@gmail.com", 28 | "url": "https://github.com/ChALkeR" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/ChALkeR/safer-buffer/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "deprecated": false, 35 | "description": "Modern Buffer API polyfill without footguns", 36 | "devDependencies": { 37 | "standard": "^11.0.1", 38 | "tape": "^4.9.0" 39 | }, 40 | "files": [ 41 | "Porting-Buffer.md", 42 | "Readme.md", 43 | "tests.js", 44 | "dangerous.js", 45 | "safer.js" 46 | ], 47 | "homepage": "https://github.com/ChALkeR/safer-buffer#readme", 48 | "license": "MIT", 49 | "main": "safer.js", 50 | "name": "safer-buffer", 51 | "repository": { 52 | "type": "git", 53 | "url": "git+https://github.com/ChALkeR/safer-buffer.git" 54 | }, 55 | "scripts": { 56 | "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", 57 | "test": "standard && tape tests.js" 58 | }, 59 | "version": "2.1.2" 60 | } 61 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/safer-buffer/safer.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable node/no-deprecated-api */ 2 | 3 | 'use strict' 4 | 5 | var buffer = require('buffer') 6 | var Buffer = buffer.Buffer 7 | 8 | var safer = {} 9 | 10 | var key 11 | 12 | for (key in buffer) { 13 | if (!buffer.hasOwnProperty(key)) continue 14 | if (key === 'SlowBuffer' || key === 'Buffer') continue 15 | safer[key] = buffer[key] 16 | } 17 | 18 | var Safer = safer.Buffer = {} 19 | for (key in Buffer) { 20 | if (!Buffer.hasOwnProperty(key)) continue 21 | if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue 22 | Safer[key] = Buffer[key] 23 | } 24 | 25 | safer.Buffer.prototype = Buffer.prototype 26 | 27 | if (!Safer.from || Safer.from === Uint8Array.from) { 28 | Safer.from = function (value, encodingOrOffset, length) { 29 | if (typeof value === 'number') { 30 | throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) 31 | } 32 | if (value && typeof value.length === 'undefined') { 33 | throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) 34 | } 35 | return Buffer(value, encodingOrOffset, length) 36 | } 37 | } 38 | 39 | if (!Safer.alloc) { 40 | Safer.alloc = function (size, fill, encoding) { 41 | if (typeof size !== 'number') { 42 | throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 43 | } 44 | if (size < 0 || size >= 2 * (1 << 30)) { 45 | throw new RangeError('The value "' + size + '" is invalid for option "size"') 46 | } 47 | var buf = Buffer(size) 48 | if (!fill || fill.length === 0) { 49 | buf.fill(0) 50 | } else if (typeof encoding === 'string') { 51 | buf.fill(fill, encoding) 52 | } else { 53 | buf.fill(fill) 54 | } 55 | return buf 56 | } 57 | } 58 | 59 | if (!safer.kStringMaxLength) { 60 | try { 61 | safer.kStringMaxLength = process.binding('buffer').kStringMaxLength 62 | } catch (e) { 63 | // we can't determine kStringMaxLength in environments where process.binding 64 | // is unsupported, so let's not set it 65 | } 66 | } 67 | 68 | if (!safer.constants) { 69 | safer.constants = { 70 | MAX_LENGTH: safer.kMaxLength 71 | } 72 | if (safer.kStringMaxLength) { 73 | safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength 74 | } 75 | } 76 | 77 | module.exports = safer 78 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: cpp 3 | notifications: 4 | email: false 5 | env: 6 | matrix: 7 | - TRAVIS_NODE_VERSION="6" 8 | - TRAVIS_NODE_VERSION="8" 9 | - TRAVIS_NODE_VERSION="10" 10 | - TRAVIS_NODE_VERSION="12" 11 | install: 12 | - rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION 13 | - node --version 14 | - npm --version 15 | - npm install 16 | script: npm test 17 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2014 Brian White. All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | SFTPStream: require('./lib/sftp'), 3 | SSH2Stream: require('./lib/ssh'), 4 | utils: require('./lib/utils'), 5 | constants: require('./lib/constants') 6 | }; -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/lib/buffer-helpers.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | readUInt32BE: function readUInt32BE(buf, offset) { 3 | return buf[offset++] * 16777216 4 | + buf[offset++] * 65536 5 | + buf[offset++] * 256 6 | + buf[offset]; 7 | }, 8 | writeUInt32BE: function writeUInt32BE(buf, value, offset) { 9 | buf[offset++] = (value >>> 24); 10 | buf[offset++] = (value >>> 16); 11 | buf[offset++] = (value >>> 8); 12 | buf[offset++] = value; 13 | return offset; 14 | }, 15 | writeUInt32LE: function writeUInt32LE(buf, value, offset) { 16 | buf[offset++] = value; 17 | buf[offset++] = (value >>> 8); 18 | buf[offset++] = (value >>> 16); 19 | buf[offset++] = (value >>> 24); 20 | return offset; 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/lib/node-fs-compat.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var inspect = require('util').inspect; 4 | 5 | function assert(value, message) { 6 | if (!value) 7 | throw new ERR_INTERNAL_ASSERTION(message); 8 | } 9 | assert.fail = function fail(message) { 10 | throw new ERR_INTERNAL_ASSERTION(message); 11 | }; 12 | 13 | // Only use this for integers! Decimal numbers do not work with this function. 14 | function addNumericalSeparator(val) { 15 | var res = ''; 16 | var i = val.length; 17 | var start = val[0] === '-' ? 1 : 0; 18 | for (; i >= start + 4; i -= 3) 19 | res = `_${val.slice(i - 3, i)}${res}`; 20 | return `${val.slice(0, i)}${res}`; 21 | } 22 | 23 | function oneOf(expected, thing) { 24 | assert(typeof thing === 'string', '`thing` has to be of type string'); 25 | if (Array.isArray(expected)) { 26 | var len = expected.length; 27 | assert(len > 0, 'At least one expected value needs to be specified'); 28 | expected = expected.map((i) => String(i)); 29 | if (len > 2) { 30 | return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` 31 | + expected[len - 1]; 32 | } else if (len === 2) { 33 | return `one of ${thing} ${expected[0]} or ${expected[1]}`; 34 | } else { 35 | return `of ${thing} ${expected[0]}`; 36 | } 37 | } else { 38 | return `of ${thing} ${String(expected)}`; 39 | } 40 | } 41 | 42 | 43 | 44 | exports.ERR_INTERNAL_ASSERTION = class ERR_INTERNAL_ASSERTION extends Error { 45 | constructor(message) { 46 | super(); 47 | Error.captureStackTrace(this, ERR_INTERNAL_ASSERTION); 48 | 49 | var suffix = 'This is caused by either a bug in ssh2-streams ' 50 | + 'or incorrect usage of ssh2-streams internals.\n' 51 | + 'Please open an issue with this stack trace at ' 52 | + 'https://github.com/mscdex/ssh2-streams/issues\n'; 53 | 54 | this.message = (message === undefined ? suffix : `${message}\n${suffix}`); 55 | } 56 | }; 57 | 58 | var MAX_32BIT_INT = Math.pow(2, 32); 59 | var MAX_32BIT_BIGINT = (function() { 60 | try { 61 | return new Function('return 2n ** 32n')(); 62 | } catch (ex) {} 63 | })(); 64 | exports.ERR_OUT_OF_RANGE = class ERR_OUT_OF_RANGE extends RangeError { 65 | constructor(str, range, input, replaceDefaultBoolean) { 66 | super(); 67 | Error.captureStackTrace(this, ERR_OUT_OF_RANGE); 68 | 69 | assert(range, 'Missing "range" argument'); 70 | var msg = (replaceDefaultBoolean 71 | ? str 72 | : `The value of "${str}" is out of range.`); 73 | var received; 74 | if (Number.isInteger(input) && Math.abs(input) > MAX_32BIT_INT) { 75 | received = addNumericalSeparator(String(input)); 76 | } else if (typeof input === 'bigint') { 77 | received = String(input); 78 | if (input > MAX_32BIT_BIGINT || input < -MAX_32BIT_BIGINT) 79 | received = addNumericalSeparator(received); 80 | received += 'n'; 81 | } else { 82 | received = inspect(input); 83 | } 84 | msg += ` It must be ${range}. Received ${received}`; 85 | 86 | this.message = msg; 87 | } 88 | }; 89 | 90 | exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends TypeError { 91 | constructor(name, expected, actual) { 92 | super(); 93 | Error.captureStackTrace(this, ERR_INVALID_ARG_TYPE); 94 | 95 | assert(typeof name === 'string', `'name' must be a string`); 96 | 97 | // determiner: 'must be' or 'must not be' 98 | var determiner; 99 | if (typeof expected === 'string' && expected.startsWith('not ')) { 100 | determiner = 'must not be'; 101 | expected = expected.replace(/^not /, ''); 102 | } else { 103 | determiner = 'must be'; 104 | } 105 | 106 | var msg; 107 | if (name.endsWith(' argument')) { 108 | // For cases like 'first argument' 109 | msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`; 110 | } else { 111 | var type = (name.includes('.') ? 'property' : 'argument'); 112 | msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`; 113 | } 114 | 115 | msg += `. Received type ${typeof actual}`; 116 | 117 | this.message = msg; 118 | } 119 | }; 120 | 121 | exports.validateNumber = function validateNumber(value, name) { 122 | if (typeof value !== 'number') 123 | throw new ERR_INVALID_ARG_TYPE(name, 'number', value); 124 | }; 125 | 126 | 127 | // ============================================================================= 128 | // Following code is only needed to support node v6.x .... 129 | 130 | // Undocumented cb() API, needed for core, not for public API 131 | exports.destroyImpl = function destroy(err, cb) { 132 | const readableDestroyed = this._readableState && 133 | this._readableState.destroyed; 134 | const writableDestroyed = this._writableState && 135 | this._writableState.destroyed; 136 | 137 | if (readableDestroyed || writableDestroyed) { 138 | if (cb) { 139 | cb(err); 140 | } else if (err) { 141 | if (!this._writableState) { 142 | process.nextTick(emitErrorNT, this, err); 143 | } else if (!this._writableState.errorEmitted) { 144 | this._writableState.errorEmitted = true; 145 | process.nextTick(emitErrorNT, this, err); 146 | } 147 | } 148 | 149 | return this; 150 | } 151 | 152 | // We set destroyed to true before firing error callbacks in order 153 | // to make it re-entrance safe in case destroy() is called within callbacks 154 | 155 | if (this._readableState) { 156 | this._readableState.destroyed = true; 157 | } 158 | 159 | // If this is a duplex stream mark the writable part as destroyed as well 160 | if (this._writableState) { 161 | this._writableState.destroyed = true; 162 | } 163 | 164 | this._destroy(err || null, (err) => { 165 | if (!cb && err) { 166 | if (!this._writableState) { 167 | process.nextTick(emitErrorAndCloseNT, this, err); 168 | } else if (!this._writableState.errorEmitted) { 169 | this._writableState.errorEmitted = true; 170 | process.nextTick(emitErrorAndCloseNT, this, err); 171 | } else { 172 | process.nextTick(emitCloseNT, this); 173 | } 174 | } else if (cb) { 175 | process.nextTick(emitCloseNT, this); 176 | cb(err); 177 | } else { 178 | process.nextTick(emitCloseNT, this); 179 | } 180 | }); 181 | 182 | return this; 183 | }; 184 | 185 | function emitErrorAndCloseNT(self, err) { 186 | emitErrorNT(self, err); 187 | emitCloseNT(self); 188 | } 189 | 190 | function emitCloseNT(self) { 191 | if (self._writableState && !self._writableState.emitClose) 192 | return; 193 | if (self._readableState && !self._readableState.emitClose) 194 | return; 195 | self.emit('close'); 196 | } 197 | // ============================================================================= 198 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/lib/utils.js: -------------------------------------------------------------------------------- 1 | var Ber = require('asn1').Ber; 2 | 3 | var readUInt32BE = require('./buffer-helpers').readUInt32BE; 4 | var writeUInt32BE = require('./buffer-helpers').writeUInt32BE; 5 | 6 | // XXX the value of 2400 from dropbear is only for certain strings, not all 7 | // strings. for example the list strings used during handshakes 8 | var MAX_STRING_LEN = Infinity;//2400; // taken from dropbear 9 | 10 | module.exports = { 11 | iv_inc: iv_inc, 12 | readInt: readInt, 13 | readString: readString, 14 | parseKey: require('./keyParser').parseKey, 15 | sigSSHToASN1: sigSSHToASN1, 16 | DSASigBERToBare: DSASigBERToBare, 17 | ECDSASigASN1ToSSH: ECDSASigASN1ToSSH 18 | }; 19 | 20 | function iv_inc(iv) { 21 | var n = 12; 22 | var c = 0; 23 | do { 24 | --n; 25 | c = iv[n]; 26 | if (c === 255) 27 | iv[n] = 0; 28 | else { 29 | iv[n] = ++c; 30 | return; 31 | } 32 | } while (n > 4); 33 | } 34 | 35 | function readInt(buffer, start, stream, cb) { 36 | var bufferLen = buffer.length; 37 | if (start < 0 || start >= bufferLen || (bufferLen - start) < 4) { 38 | stream && stream._cleanup(cb); 39 | return false; 40 | } 41 | 42 | return readUInt32BE(buffer, start); 43 | } 44 | 45 | function DSASigBERToBare(signature) { 46 | if (signature.length <= 40) 47 | return signature; 48 | // This is a quick and dirty way to get from BER encoded r and s that 49 | // OpenSSL gives us, to just the bare values back to back (40 bytes 50 | // total) like OpenSSH (and possibly others) are expecting 51 | var asnReader = new Ber.Reader(signature); 52 | asnReader.readSequence(); 53 | var r = asnReader.readString(Ber.Integer, true); 54 | var s = asnReader.readString(Ber.Integer, true); 55 | var rOffset = 0; 56 | var sOffset = 0; 57 | if (r.length < 20) { 58 | var rNew = Buffer.allocUnsafe(20); 59 | r.copy(rNew, 1); 60 | r = rNew; 61 | r[0] = 0; 62 | } 63 | if (s.length < 20) { 64 | var sNew = Buffer.allocUnsafe(20); 65 | s.copy(sNew, 1); 66 | s = sNew; 67 | s[0] = 0; 68 | } 69 | if (r.length > 20 && r[0] === 0x00) 70 | rOffset = 1; 71 | if (s.length > 20 && s[0] === 0x00) 72 | sOffset = 1; 73 | var newSig = Buffer.allocUnsafe((r.length - rOffset) + (s.length - sOffset)); 74 | r.copy(newSig, 0, rOffset); 75 | s.copy(newSig, r.length - rOffset, sOffset); 76 | return newSig; 77 | } 78 | 79 | function ECDSASigASN1ToSSH(signature) { 80 | if (signature[0] === 0x00) 81 | return signature; 82 | // Convert SSH signature parameters to ASN.1 BER values for OpenSSL 83 | var asnReader = new Ber.Reader(signature); 84 | asnReader.readSequence(); 85 | var r = asnReader.readString(Ber.Integer, true); 86 | var s = asnReader.readString(Ber.Integer, true); 87 | if (r === null || s === null) 88 | return false; 89 | var newSig = Buffer.allocUnsafe(4 + r.length + 4 + s.length); 90 | writeUInt32BE(newSig, r.length, 0); 91 | r.copy(newSig, 4); 92 | writeUInt32BE(newSig, s.length, 4 + r.length); 93 | s.copy(newSig, 4 + 4 + r.length); 94 | return newSig; 95 | } 96 | 97 | function sigSSHToASN1(sig, type, self, callback) { 98 | var asnWriter; 99 | switch (type) { 100 | case 'ssh-dss': 101 | if (sig.length > 40) 102 | return sig; 103 | // Change bare signature r and s values to ASN.1 BER values for OpenSSL 104 | asnWriter = new Ber.Writer(); 105 | asnWriter.startSequence(); 106 | var r = sig.slice(0, 20); 107 | var s = sig.slice(20); 108 | if (r[0] & 0x80) { 109 | var rNew = Buffer.allocUnsafe(21); 110 | rNew[0] = 0x00; 111 | r.copy(rNew, 1); 112 | r = rNew; 113 | } else if (r[0] === 0x00 && !(r[1] & 0x80)) { 114 | r = r.slice(1); 115 | } 116 | if (s[0] & 0x80) { 117 | var sNew = Buffer.allocUnsafe(21); 118 | sNew[0] = 0x00; 119 | s.copy(sNew, 1); 120 | s = sNew; 121 | } else if (s[0] === 0x00 && !(s[1] & 0x80)) { 122 | s = s.slice(1); 123 | } 124 | asnWriter.writeBuffer(r, Ber.Integer); 125 | asnWriter.writeBuffer(s, Ber.Integer); 126 | asnWriter.endSequence(); 127 | return asnWriter.buffer; 128 | case 'ecdsa-sha2-nistp256': 129 | case 'ecdsa-sha2-nistp384': 130 | case 'ecdsa-sha2-nistp521': 131 | var r = readString(sig, 0, self, callback); 132 | if (r === false) 133 | return false; 134 | var s = readString(sig, sig._pos, self, callback); 135 | if (s === false) 136 | return false; 137 | 138 | asnWriter = new Ber.Writer(); 139 | asnWriter.startSequence(); 140 | asnWriter.writeBuffer(r, Ber.Integer); 141 | asnWriter.writeBuffer(s, Ber.Integer); 142 | asnWriter.endSequence(); 143 | return asnWriter.buffer; 144 | default: 145 | return sig; 146 | } 147 | } 148 | 149 | function readString(buffer, start, encoding, stream, cb, maxLen) { 150 | if (encoding && !Buffer.isBuffer(encoding) && typeof encoding !== 'string') { 151 | if (typeof cb === 'number') 152 | maxLen = cb; 153 | cb = stream; 154 | stream = encoding; 155 | encoding = undefined; 156 | } 157 | 158 | start || (start = 0); 159 | var bufferLen = buffer.length; 160 | var left = (bufferLen - start); 161 | var len; 162 | var end; 163 | if (start < 0 || start >= bufferLen || left < 4) { 164 | stream && stream._cleanup(cb); 165 | return false; 166 | } 167 | 168 | len = readUInt32BE(buffer, start); 169 | if (len > (maxLen || MAX_STRING_LEN) || left < (4 + len)) { 170 | stream && stream._cleanup(cb); 171 | return false; 172 | } 173 | 174 | start += 4; 175 | end = start + len; 176 | buffer._pos = end; 177 | 178 | if (encoding) { 179 | if (Buffer.isBuffer(encoding)) { 180 | buffer.copy(encoding, 0, start, end); 181 | return encoding; 182 | } else { 183 | return buffer.toString(encoding, start, end); 184 | } 185 | } else { 186 | return buffer.slice(start, end); 187 | } 188 | } 189 | 190 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "ssh2-streams@0.4.9", 3 | "_id": "ssh2-streams@0.4.9", 4 | "_inBundle": false, 5 | "_integrity": "sha512-glMQKeYKuA+rLaH16fJC3nZMV1BWklbxuYCR4C5/LlBSf2yaoNRpPU7Ul702xsi5nvYjIx9XDkKBJwrBjkDynw==", 6 | "_location": "/ssh2-streams", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "ssh2-streams@0.4.9", 12 | "name": "ssh2-streams", 13 | "escapedName": "ssh2-streams", 14 | "rawSpec": "0.4.9", 15 | "saveSpec": null, 16 | "fetchSpec": "0.4.9" 17 | }, 18 | "_requiredBy": [ 19 | "/" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.9.tgz", 22 | "_shasum": "d3d92155410001437d27119d9c023b303cbe2309", 23 | "_spec": "ssh2-streams@0.4.9", 24 | "_where": "/workspace/ssh-agent-backend", 25 | "author": { 26 | "name": "Brian White", 27 | "email": "mscdex@mscdex.net" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/mscdex/ssh2-streams/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "dependencies": { 34 | "asn1": "~0.2.0", 35 | "bcrypt-pbkdf": "^1.0.2", 36 | "streamsearch": "~0.1.2" 37 | }, 38 | "deprecated": false, 39 | "description": "SSH2 and SFTP(v3) client/server protocol streams for node.js", 40 | "engines": { 41 | "node": ">=5.2.0" 42 | }, 43 | "homepage": "https://github.com/mscdex/ssh2-streams#readme", 44 | "keywords": [ 45 | "ssh", 46 | "ssh2", 47 | "sftp", 48 | "secure", 49 | "protocol", 50 | "streams", 51 | "client", 52 | "server" 53 | ], 54 | "licenses": [ 55 | { 56 | "type": "MIT", 57 | "url": "http://github.com/mscdex/ssh2-streams/raw/master/LICENSE" 58 | } 59 | ], 60 | "main": "./index", 61 | "name": "ssh2-streams", 62 | "repository": { 63 | "type": "git", 64 | "url": "git+ssh://git@github.com/mscdex/ssh2-streams.git" 65 | }, 66 | "scripts": { 67 | "test": "node test/test.js" 68 | }, 69 | "version": "0.4.9" 70 | } 71 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH 3 | NzAAAAgQDg+DsMAituSW/NJpWVy2w7xN6Uu/IfCqpy38CFBW+mBnOX7OzPulI+1uZxXRLy 4 | UKiQDAegXCqSHMCo5ACZhw2BRwq74J4VA5fOFGdwcacTQo1zKDF64wvyVSgQE/E2PSFLKu 5 | NHHtRFnjvq6WrgTQsL9aif2FBWS5q0MGahzXhNkQAAABUAn1ASRSRcIVsWqrrZubFQq4pU 6 | OlMAAACBALcKIRLTtYG5+N/vzEULdsXSGToDRth6X5Yjb7c0UotAmy9VGrnmN5IO+//1em 7 | 2USHeSoO+5shRq92zdggdQwNaXXzU301huIETztfRwGHOfUGZbzJmIqdzLhdziFhneAzaN 8 | zVeUFyIqvWL1Q89WgC2Uh3DY/lK/gIhRK7WD0cDAAAAAgC882WUEEig48DVyjbNi1xf8rG 9 | svyypMHSs2rj6pja2Upfm+C5AKKU387x8Vj/Kz291ROIl7h/AhmKOlwdxwPZOG5ffDygaW 10 | Tlo4/JagwP9HmTsK1Tyd1chuyMk9cNLdgWFsCGGHY2RcEwccq9panvvtKp57HqDaT1W7AS 11 | g2spT9AAAB8G4oDW5uKA1uAAAAB3NzaC1kc3MAAACBAOD4OwwCK25Jb80mlZXLbDvE3pS7 12 | 8h8KqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUDl8 13 | 4UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZLmrQwZqHN 14 | eE2RAAAAFQCfUBJFJFwhWxaqutm5sVCrilQ6UwAAAIEAtwohEtO1gbn43+/MRQt2xdIZOg 15 | NG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2CB1DA1pdfNTfTWG4g 16 | RPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVDz1aALZSHcNj+Ur+AiFErtY 17 | PRwMAAAACALzzZZQQSKDjwNXKNs2LXF/ysay/LKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP 18 | 8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PKBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYW 19 | wIYYdjZFwTBxyr2lqe++0qnnseoNpPVbsBKDaylP0AAAAVAIoWASGAfFqckLwvtPRNCzow 20 | TTl1AAAAEm5ldyBvcGVuc3NoIGZvcm1hdAECAwQFBgc= 21 | -----END OPENSSH PRIVATE KEY----- 22 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa.pub: -------------------------------------------------------------------------------- 1 | ssh-dss AAAAB3NzaC1kc3MAAACBAOD4OwwCK25Jb80mlZXLbDvE3pS78h8KqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUDl84UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZLmrQwZqHNeE2RAAAAFQCfUBJFJFwhWxaqutm5sVCrilQ6UwAAAIEAtwohEtO1gbn43+/MRQt2xdIZOgNG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2CB1DA1pdfNTfTWG4gRPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVDz1aALZSHcNj+Ur+AiFErtYPRwMAAAACALzzZZQQSKDjwNXKNs2LXF/ysay/LKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PKBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnseoNpPVbsBKDaylP0= new openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASwGByqGSM44BAEwggEfAoGBAOD4OwwCK25Jb80mlZXLbDvE3pS78h8K\nqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUD\nl84UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZL\nmrQwZqHNeE2RAhUAn1ASRSRcIVsWqrrZubFQq4pUOlMCgYEAtwohEtO1gbn43+/M\nRQt2xdIZOgNG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2C\nB1DA1pdfNTfTWG4gRPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVD\nz1aALZSHcNj+Ur+AiFErtYPRwMADgYQAAoGALzzZZQQSKDjwNXKNs2LXF/ysay/L\nKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PK\nBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnse\noNpPVbsBKDaylP0=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAOD4OwwCK25Jb80mlZXLbDvE3pS78h8KqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUDl84UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZLmrQwZqHNeE2RAAAAFQCfUBJFJFwhWxaqutm5sVCrilQ6UwAAAIEAtwohEtO1gbn43+/MRQt2xdIZOgNG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2CB1DA1pdfNTfTWG4gRPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVDz1aALZSHcNj+Ur+AiFErtYPRwMAAAACALzzZZQQSKDjwNXKNs2LXF/ysay/LKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PKBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnseoNpPVbsBKDaylP0=", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-dss", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASwGByqGSM44BAEwggEfAoGBAOD4OwwCK25Jb80mlZXLbDvE3pS78h8K\nqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUD\nl84UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZL\nmrQwZqHNeE2RAhUAn1ASRSRcIVsWqrrZubFQq4pUOlMCgYEAtwohEtO1gbn43+/M\nRQt2xdIZOgNG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2C\nB1DA1pdfNTfTWG4gRPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVD\nz1aALZSHcNj+Ur+AiFErtYPRwMADgYQAAoGALzzZZQQSKDjwNXKNs2LXF/ysay/L\nKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PK\nBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnse\noNpPVbsBKDaylP0=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAOD4OwwCK25Jb80mlZXLbDvE3pS78h8KqnLfwIUFb6YGc5fs7M+6Uj7W5nFdEvJQqJAMB6BcKpIcwKjkAJmHDYFHCrvgnhUDl84UZ3BxpxNCjXMoMXrjC/JVKBAT8TY9IUsq40ce1EWeO+rpauBNCwv1qJ/YUFZLmrQwZqHNeE2RAAAAFQCfUBJFJFwhWxaqutm5sVCrilQ6UwAAAIEAtwohEtO1gbn43+/MRQt2xdIZOgNG2HpfliNvtzRSi0CbL1UaueY3kg77//V6bZRId5Kg77myFGr3bN2CB1DA1pdfNTfTWG4gRPO19HAYc59QZlvMmYip3MuF3OIWGd4DNo3NV5QXIiq9YvVDz1aALZSHcNj+Ur+AiFErtYPRwMAAAACALzzZZQQSKDjwNXKNs2LXF/ysay/LKkwdKzauPqmNrZSl+b4LkAopTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PKBpZOWjj8lqDA/0eZOwrVPJ3VyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnseoNpPVbsBKDaylP0=", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBvAIBAAKBgQDg+DsMAituSW/NJpWVy2w7xN6Uu/IfCqpy38CFBW+mBnOX7OzP\nulI+1uZxXRLyUKiQDAegXCqSHMCo5ACZhw2BRwq74J4VA5fOFGdwcacTQo1zKDF6\n4wvyVSgQE/E2PSFLKuNHHtRFnjvq6WrgTQsL9aif2FBWS5q0MGahzXhNkQIVAJ9Q\nEkUkXCFbFqq62bmxUKuKVDpTAoGBALcKIRLTtYG5+N/vzEULdsXSGToDRth6X5Yj\nb7c0UotAmy9VGrnmN5IO+//1em2USHeSoO+5shRq92zdggdQwNaXXzU301huIETz\ntfRwGHOfUGZbzJmIqdzLhdziFhneAzaNzVeUFyIqvWL1Q89WgC2Uh3DY/lK/gIhR\nK7WD0cDAAoGALzzZZQQSKDjwNXKNs2LXF/ysay/LKkwdKzauPqmNrZSl+b4LkAop\nTfzvHxWP8rPb3VE4iXuH8CGYo6XB3HA9k4bl98PKBpZOWjj8lqDA/0eZOwrVPJ3V\nyG7IyT1w0t2BYWwIYYdjZFwTBxyr2lqe++0qnnseoNpPVbsBKDaylP0CFQCKFgEh\ngHxanJC8L7T0TQs6ME05dQ==\n-----END DSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBgJ5gXYn 3 | /2IFE2+CrAxYR8AAAAEAAAAAEAAAGxAAAAB3NzaC1kc3MAAACBAPKhVnFGWb0KLibdYnJz 4 | 0RwFy/mt98KMIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0 5 | w+ZYfVHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vy 6 | k1bw7ske+ImLAAAAFQDnXsk6hdenasLyE8ylLHSE+0XR3QAAAIBsMerhmMT0/416hJV/pr 7 | s7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/IjU62Sz6n 8 | /qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK6eRJfrZuaq0Yue 9 | nUa9AuFwnjPAAAAIBwjDUjp9jaJu46eobNK8CWJL/Noi2fXTtFZFgUFRwkr/FXLLsOckQT 10 | mYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuCx6dIgiOf2gRClQU5OlqhrnMW2BQXlR 11 | hBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/C2XBGgEuRdgyqQAAAgDIGP0oYyi7sTk0HdU9 12 | uWZLaDhHpW4Z8xTzfgUDbxoTYQ2igO90O32vSqW/cC2QKWTFuPCFnsCerHAIGzX/eyxlCQ 13 | VyNa7VrhbNjIKAHBF3XMcRVRbW2SdYq8tHSkeZHr5EuO5dRfJ7wsR8flkPb4O4viNlIbvF 14 | Ake8dsZEOhcnVNiv+NMR9mTq8l91wR60tr3XiWzCMkEYrJiWOfQuZSvzYi7dUmFxQuEZfQ 15 | vIPkZD3L6XdaAz/r6YAONFAbtUMAOaUxOGV9puSsunSosAvmi+NcJ9iUM2FpAu561gp+Tv 16 | RRcgXHxLGuzTNASiMaTN3M+HenqUh3RWmWauL5wSR7DbrH7Vq47YTnVjtg8xcZnMCfOx2D 17 | Wz775hD6uyLwbkxKMaNMf8p4sOcXsSpHNqKmfkUxQBpNRp6Vg5W+AVaAkyXQng2LRt6txJ 18 | Xv5zBiSFdsobkrWko/ONfGKfG+zVP+LIVcghLpp71GZQX6Ci02vB55pvk8k0G91H3INn/c 19 | t6Q5zY5pK9VZwxjZ29psm7V+FdeD1g8VQ1Rp9muq6zDXHKKyqkBK/oGCM9UhBHFjki0gBR 20 | v6LY/iXsz/eG14svhLjM5zYFSX7jUOI9b/PnhhL7Mos4wguHN2EjfGWuC07PkkqDPoqSwn 21 | cC91OKhub6yqZsqvBz9BcV+2FxVNPNKzRdzA== 22 | -----END OPENSSH PRIVATE KEY----- 23 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc.pub: -------------------------------------------------------------------------------- 1 | ssh-dss AAAAB3NzaC1kc3MAAACBAPKhVnFGWb0KLibdYnJz0RwFy/mt98KMIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0w+ZYfVHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vyk1bw7ske+ImLAAAAFQDnXsk6hdenasLyE8ylLHSE+0XR3QAAAIBsMerhmMT0/416hJV/prs7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/IjU62Sz6n/qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK6eRJfrZuaq0YuenUa9AuFwnjPAAAAIBwjDUjp9jaJu46eobNK8CWJL/Noi2fXTtFZFgUFRwkr/FXLLsOckQTmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuCx6dIgiOf2gRClQU5OlqhrnMW2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/C2XBGgEuRdgyqQ== 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtjCCASsGByqGSM44BAEwggEeAoGBAPKhVnFGWb0KLibdYnJz0RwFy/mt98KM\nIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0w+ZYfV\nHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vy\nk1bw7ske+ImLAhUA517JOoXXp2rC8hPMpSx0hPtF0d0CgYBsMerhmMT0/416hJV/\nprs7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/I\njU62Sz6n/qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK\n6eRJfrZuaq0YuenUa9AuFwnjPAOBhAACgYBwjDUjp9jaJu46eobNK8CWJL/Noi2f\nXTtFZFgUFRwkr/FXLLsOckQTmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuC\nx6dIgiOf2gRClQU5OlqhrnMW2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/\nC2XBGgEuRdgyqQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAPKhVnFGWb0KLibdYnJz0RwFy/mt98KMIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0w+ZYfVHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vyk1bw7ske+ImLAAAAFQDnXsk6hdenasLyE8ylLHSE+0XR3QAAAIBsMerhmMT0/416hJV/prs7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/IjU62Sz6n/qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK6eRJfrZuaq0YuenUa9AuFwnjPAAAAIBwjDUjp9jaJu46eobNK8CWJL/Noi2fXTtFZFgUFRwkr/FXLLsOckQTmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuCx6dIgiOf2gRClQU5OlqhrnMW2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/C2XBGgEuRdgyqQ==", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-dss", 3 | "comment": "new openssh format encrypted", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtjCCASsGByqGSM44BAEwggEeAoGBAPKhVnFGWb0KLibdYnJz0RwFy/mt98KM\nIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0w+ZYfV\nHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vy\nk1bw7ske+ImLAhUA517JOoXXp2rC8hPMpSx0hPtF0d0CgYBsMerhmMT0/416hJV/\nprs7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/I\njU62Sz6n/qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK\n6eRJfrZuaq0YuenUa9AuFwnjPAOBhAACgYBwjDUjp9jaJu46eobNK8CWJL/Noi2f\nXTtFZFgUFRwkr/FXLLsOckQTmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuC\nx6dIgiOf2gRClQU5OlqhrnMW2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/\nC2XBGgEuRdgyqQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAPKhVnFGWb0KLibdYnJz0RwFy/mt98KMIdByHKQWRm9UjoVJk1ypuQpnj+bqFnxCzCFSU9OUj0/Xe0Wuk+kF2BtMO0w+ZYfVHCqEaaIJ1D/iLqi8aBbYs552l9+P0DsFUlTE0D/AvKTQ2PsztFq7wHUTQVmnj4vyk1bw7ske+ImLAAAAFQDnXsk6hdenasLyE8ylLHSE+0XR3QAAAIBsMerhmMT0/416hJV/prs7crOX0e0gF8C7kar/ILj5WULX7k143+4lgluoogrPXbd5fXgOnqdQawow8a/IjU62Sz6n/qfHLJtQ2sJOK2Vkj5NF2UCcRHrewqJw9nDCS7yYh3c+gUfIBcIRkEJK6eRJfrZuaq0YuenUa9AuFwnjPAAAAIBwjDUjp9jaJu46eobNK8CWJL/Noi2fXTtFZFgUFRwkr/FXLLsOckQTmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuCx6dIgiOf2gRClQU5OlqhrnMW2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/C2XBGgEuRdgyqQ==", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBugIBAAKBgQDyoVZxRlm9Ci4m3WJyc9EcBcv5rffCjCHQchykFkZvVI6FSZNc\nqbkKZ4/m6hZ8QswhUlPTlI9P13tFrpPpBdgbTDtMPmWH1RwqhGmiCdQ/4i6ovGgW\n2LOedpffj9A7BVJUxNA/wLyk0Nj7M7Rau8B1E0FZp4+L8pNW8O7JHviJiwIVAOde\nyTqF16dqwvITzKUsdIT7RdHdAoGAbDHq4ZjE9P+NeoSVf6a7O3Kzl9HtIBfAu5Gq\n/yC4+VlC1+5NeN/uJYJbqKIKz123eX14Dp6nUGsKMPGvyI1Otks+p/6nxyybUNrC\nTitlZI+TRdlAnER63sKicPZwwku8mId3PoFHyAXCEZBCSunkSX62bmqtGLnp1GvQ\nLhcJ4zwCgYBwjDUjp9jaJu46eobNK8CWJL/Noi2fXTtFZFgUFRwkr/FXLLsOckQT\nmYxaWcxP4NwuvMyI25tOueM0RvAIR7J3Afc5pbuCx6dIgiOf2gRClQU5OlqhrnMW\n2BQXlRhBKBNMp5LjM5t46KTBkjh/30//s4Kimrp/C2XBGgEuRdgyqQIUSNLlRVPv\nMC3Q3P3ajY1DdZvi9z8=\n-----END DSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc_gcm: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAAFmFlczEyOC1nY21Ab3BlbnNzaC5jb20AAAAGYmNyeXB0AA 3 | AAGAAAABD01pNY1+DTCAHuI6mcjB0YAAAAEAAAAAEAAAGyAAAAB3NzaC1kc3MAAACBAPLA 4 | N0jFExSJiCvw7p2W2v5tqvXIG4YwCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJ 5 | iP98Vz0XTHIW6DpkE9DcC5GGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79s 6 | ZPOEg/bMExWJlB5AosJr7v5twVftAAAAFQC5AGsioHKAc2Cd2QwKLUZSmDZAVwAAAIBxYf 7 | EThMIXPQkSer3snKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrL 8 | OnIbqU1XApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/q 9 | MsMu2RSKkK6f08J0vsESnKU4nmnwAAAIEAxH8NZyntzihIAHnx1Lbo7h1sPi4RhcpKK5pS 10 | UiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3qhq/B3bspx1GWjL 11 | qLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi7GdZG8Q0tuyfXxsAAAIA 12 | PDupGK4wMtROtFZqo7vduzkHJuDrE/tAwGqiD2pKMova7WaKM0EUznwcl3gtmhHvFeY+NJ 13 | 3Uc9sQcX/9n3y6NAYsC+eZeqe7Sy2GWVyqxOUJHpZqfsKYJidG61TBgKgx+JXAeidYdz4L 14 | 4cEapwwocOptbY3ZRFmszekq5xPomnkP9DeSQG6l4eYSv7OpeAHlFj2KCmJMVEZDOl6RyJ 15 | KCqOpfEJIIVoCmna/hQdd9ptLVFmbX/VShgLjvUwfBggJtZNPb5jx+PMy+I0ylywaCIG5K 16 | JQAqust6dzFBx3mBoO4kZPBHlb8XwQ4HYLYph0Ur/lINsHrpLxgmtEw7zzs73Nshl6go2V 17 | uvBtcZ5ywAMk+8CLP5ZgpiGBxlMtFGowp/5zuJxRpc9FgdfxnnVWDyzcQ/YvX9lwzb6cNz 18 | bXeLPsKjOSLPV7G/RFIiuCAOa97ZCM8Ho4FhdNYOGilmjuxV7FJiTc7KP2r+Wh3oxsV7AB 19 | Q6Thj06b2mX3iE4hqLaMKIVE1zs22nMlUtFJv8YY1ZWBihUVlnR9vWgIH7ODoZOwNWBlLd 20 | Qfyfi8w3KgJWj5oVNAM7WniNFQjfNxEbrPklfYg93deVE/LhPghs9I7fsIeHY/p8GtsO/S 21 | amTcjkYi6pUuT8m7IeFYQ8cWvGnbaYz6/9+ni+0aoUL93GKHQw1+mBUVuswVZXBF1WVCf+ 22 | LMgZ 23 | -----END OPENSSH PRIVATE KEY----- 24 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc_gcm.pub: -------------------------------------------------------------------------------- 1 | ssh-dss AAAAB3NzaC1kc3MAAACBAPLAN0jFExSJiCvw7p2W2v5tqvXIG4YwCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJiP98Vz0XTHIW6DpkE9DcC5GGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79sZPOEg/bMExWJlB5AosJr7v5twVftAAAAFQC5AGsioHKAc2Cd2QwKLUZSmDZAVwAAAIBxYfEThMIXPQkSer3snKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrLOnIbqU1XApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/qMsMu2RSKkK6f08J0vsESnKU4nmnwAAAIEAxH8NZyntzihIAHnx1Lbo7h1sPi4RhcpKK5pSUiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3qhq/B3bspx1GWjLqLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi7GdZG8Q0tuyfXxs= 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc_gcm.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASsGByqGSM44BAEwggEeAoGBAPLAN0jFExSJiCvw7p2W2v5tqvXIG4Yw\nCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJiP98Vz0XTHIW6DpkE9DcC5\nGGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79sZPOEg/bMExWJlB5A\nosJr7v5twVftAhUAuQBrIqBygHNgndkMCi1GUpg2QFcCgYBxYfEThMIXPQkSer3s\nnKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrLOnIbqU1X\nApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/qMs\nMu2RSKkK6f08J0vsESnKU4nmnwOBhQACgYEAxH8NZyntzihIAHnx1Lbo7h1sPi4R\nhcpKK5pSUiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3q\nhq/B3bspx1GWjLqLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi\n7GdZG8Q0tuyfXxs=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAPLAN0jFExSJiCvw7p2W2v5tqvXIG4YwCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJiP98Vz0XTHIW6DpkE9DcC5GGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79sZPOEg/bMExWJlB5AosJr7v5twVftAAAAFQC5AGsioHKAc2Cd2QwKLUZSmDZAVwAAAIBxYfEThMIXPQkSer3snKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrLOnIbqU1XApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/qMsMu2RSKkK6f08J0vsESnKU4nmnwAAAIEAxH8NZyntzihIAHnx1Lbo7h1sPi4RhcpKK5pSUiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3qhq/B3bspx1GWjLqLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi7GdZG8Q0tuyfXxs=", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_dsa_enc_gcm.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-dss", 3 | "comment": "new openssh format encrypted gcm", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASsGByqGSM44BAEwggEeAoGBAPLAN0jFExSJiCvw7p2W2v5tqvXIG4Yw\nCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJiP98Vz0XTHIW6DpkE9DcC5\nGGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79sZPOEg/bMExWJlB5A\nosJr7v5twVftAhUAuQBrIqBygHNgndkMCi1GUpg2QFcCgYBxYfEThMIXPQkSer3s\nnKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrLOnIbqU1X\nApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/qMs\nMu2RSKkK6f08J0vsESnKU4nmnwOBhQACgYEAxH8NZyntzihIAHnx1Lbo7h1sPi4R\nhcpKK5pSUiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3q\nhq/B3bspx1GWjLqLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi\n7GdZG8Q0tuyfXxs=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAPLAN0jFExSJiCvw7p2W2v5tqvXIG4YwCglrl2wnGOMBGmfaeIcxZErzW00hOxq+NvDIlK43kJiP98Vz0XTHIW6DpkE9DcC5GGA6nDZn9L+BSrBL8NhuBlz2ekgWOTCqnDC7Il/iyUCMi79sZPOEg/bMExWJlB5AosJr7v5twVftAAAAFQC5AGsioHKAc2Cd2QwKLUZSmDZAVwAAAIBxYfEThMIXPQkSer3snKJfDz0uvc1y/6htsjXLk93TAAi3LSD2dGqYs5s0WfzO4RnFso0EovrLOnIbqU1XApr6CPKAVX2REsXFWWF3VixEHIEF1Q9gIvHdYgAxSxtwYvOPpAwDmaPxWeV5/qMsMu2RSKkK6f08J0vsESnKU4nmnwAAAIEAxH8NZyntzihIAHnx1Lbo7h1sPi4RhcpKK5pSUiaKoWxkjseqUsyWENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3qhq/B3bspx1GWjLqLfKbeVi4un8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi7GdZG8Q0tuyfXxs=", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBuwIBAAKBgQDywDdIxRMUiYgr8O6dltr+bar1yBuGMAoJa5dsJxjjARpn2niH\nMWRK81tNITsavjbwyJSuN5CYj/fFc9F0xyFug6ZBPQ3AuRhgOpw2Z/S/gUqwS/DY\nbgZc9npIFjkwqpwwuyJf4slAjIu/bGTzhIP2zBMViZQeQKLCa+7+bcFX7QIVALkA\nayKgcoBzYJ3ZDAotRlKYNkBXAoGAcWHxE4TCFz0JEnq97JyiXw89Lr3Ncv+obbI1\ny5Pd0wAIty0g9nRqmLObNFn8zuEZxbKNBKL6yzpyG6lNVwKa+gjygFV9kRLFxVlh\nd1YsRByBBdUPYCLx3WIAMUsbcGLzj6QMA5mj8Vnlef6jLDLtkUipCun9PCdL7BEp\nylOJ5p8CgYEAxH8NZyntzihIAHnx1Lbo7h1sPi4RhcpKK5pSUiaKoWxkjseqUsyW\nENt6DTByIdGhBNrOp9/vw2R5CSUkxuI0TlI8bj3qhq/B3bspx1GWjLqLfKbeVi4u\nn8CrooRRq2g8+nYLu2EWbF/56pEEzws6DptlDJQi7GdZG8Q0tuyfXxsCFG8ERflm\nOIBFUymTHP8ZeVOgNm/1\n-----END DSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS 3 | 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTjIb0On/AzYDLFRi+g3fGdAIF72KFG 4 | iZBpP8oKZ8bsncH9ULtVV9517cNcRNuDETQtvLqoCdIn7TipYo8Jv/lKAAAAsA6ULqEOlC 5 | 6hAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOMhvQ6f8DNgMsVG 6 | L6Dd8Z0AgXvYoUaJkGk/ygpnxuydwf1Qu1VX3nXtw1xE24MRNC28uqgJ0iftOKlijwm/+U 7 | oAAAAfVd3jjve28r7FhY6Uo//cKIM1rBeWZG16b8bjyVyFswAAABJuZXcgb3BlbnNzaCBm 8 | b3JtYXQBAgMEBQYH 9 | -----END OPENSSH PRIVATE KEY----- 10 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOMhvQ6f8DNgMsVGL6Dd8Z0AgXvYoUaJkGk/ygpnxuydwf1Qu1VX3nXtw1xE24MRNC28uqgJ0iftOKlijwm/+Uo= new openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4yG9Dp/wM2AyxUYvoN3xnQCBe9ih\nRomQaT/KCmfG7J3B/VC7VVfede3DXETbgxE0Lby6qAnSJ+04qWKPCb/5Sg==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOMhvQ6f8DNgMsVGL6Dd8Z0AgXvYoUaJkGk/ygpnxuydwf1Qu1VX3nXtw1xE24MRNC28uqgJ0iftOKlijwm/+Uo=", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4yG9Dp/wM2AyxUYvoN3xnQCBe9ih\nRomQaT/KCmfG7J3B/VC7VVfede3DXETbgxE0Lby6qAnSJ+04qWKPCb/5Sg==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOMhvQ6f8DNgMsVGL6Dd8Z0AgXvYoUaJkGk/ygpnxuydwf1Qu1VX3nXtw1xE24MRNC28uqgJ0iftOKlijwm/+Uo=", 6 | "private": "-----BEGIN EC PRIVATE KEY-----\nMHYCAQEEH1Xd4473tvK+xYWOlKP/3CiDNawXlmRtem/G48lchbOgCgYIKoZIzj0D\nAQehRANCAATjIb0On/AzYDLFRi+g3fGdAIF72KFGiZBpP8oKZ8bsncH9ULtVV951\n7cNcRNuDETQtvLqoCdIn7TipYo8Jv/lK\n-----END EC PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBqNbb13W 3 | CKfO7B1vpwJDwbAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz 4 | dHAyNTYAAABBBJibjz7zvP/EhMZrW/JDdKvYgiEATNUKMfg2NOVxKlf++eTRypLFc1doTp 5 | r+04Ebm1fkyp8RgpFsmvLXLt/dKU0AAADA86k3lHnP6pfD977mwEtKxHOJm44wx8NsdBwN 6 | mNLqxlxUE520nsXjDgpgNU0MF9JDnc1kdhSy8PcdTAAH5+k6bpf3gotPrltPUBMFQdPqst 7 | 5kVS7zOgaxv1qZnlyhOqEdNR3Hee09gJByRrAojtcs+sPI7Nba879NPMb5c5K+gKhONHsa 8 | wLAnz66eFQH5iLjd2MwrV4gJe0x6NGCSI2kyzNlxFsoIl7IcHlJHyyuaSlEOFWQJB8cbB4 9 | BVZB+/8yAx 10 | -----END OPENSSH PRIVATE KEY----- 11 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJibjz7zvP/EhMZrW/JDdKvYgiEATNUKMfg2NOVxKlf++eTRypLFc1doTpr+04Ebm1fkyp8RgpFsmvLXLt/dKU0= 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmJuPPvO8/8SExmtb8kN0q9iCIQBM\n1Qox+DY05XEqV/755NHKksVzV2hOmv7TgRubV+TKnxGCkWya8tcu390pTQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJibjz7zvP/EhMZrW/JDdKvYgiEATNUKMfg2NOVxKlf++eTRypLFc1doTpr+04Ebm1fkyp8RgpFsmvLXLt/dKU0=", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "new openssh format encrypted", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmJuPPvO8/8SExmtb8kN0q9iCIQBM\n1Qox+DY05XEqV/755NHKksVzV2hOmv7TgRubV+TKnxGCkWya8tcu390pTQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJibjz7zvP/EhMZrW/JDdKvYgiEATNUKMfg2NOVxKlf++eTRypLFc1doTpr+04Ebm1fkyp8RgpFsmvLXLt/dKU0=", 6 | "private": "-----BEGIN EC PRIVATE KEY-----\nMHgCAQEEIQDG2nALLBBmkBnw1QvdW4ClRfF3Zl3CcRHujsYz9CLvf6AKBggqhkjO\nPQMBB6FEA0IABJibjz7zvP/EhMZrW/JDdKvYgiEATNUKMfg2NOVxKlf++eTRypLF\nc1doTpr+04Ebm1fkyp8RgpFsmvLXLt/dKU0=\n-----END EC PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc_gcm: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAAFmFlczEyOC1nY21Ab3BlbnNzaC5jb20AAAAGYmNyeXB0AA 3 | AAGAAAABAHURyWtYwqVbjholNpL6opAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlz 4 | dHAyNTYAAAAIbmlzdHAyNTYAAABBBM+ppawNxvkdHbOaB3ygsRueTdIKiT+OQkAH/5LpDx 5 | XcD6i5AR8T/vrCsZ9/y+8GxU8gmvg4Uszr6LDfaQBZnsUAAADAFqKM/ylVkJ/ZA40ZROrW 6 | LNgrttf2+lpVkADwXWzhuESFPPzERKlbHVsVtbiiYmPkLnY1s5VM4zXIj7xyO9YNA9KcM5 7 | GHOKUL2/NmDaTyGgc9s3BGu/ibpjSeOd1rtGAB4cw1s9ifbXBQd3qDbqzaEmovs3MGaGHD 8 | c3VagdxhsppjrPjZ+B40Pzs9QkSGutsSJDpH9wVIu4OLr89TquTU3PVACDRU03lPPENVbt 9 | rh2IMJeEQyNINQHtfVwordj8LMOEsBjyQ1aqHNva/iKyTBiw== 10 | -----END OPENSSH PRIVATE KEY----- 11 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc_gcm.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM+ppawNxvkdHbOaB3ygsRueTdIKiT+OQkAH/5LpDxXcD6i5AR8T/vrCsZ9/y+8GxU8gmvg4Uszr6LDfaQBZnsU= 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc_gcm.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEz6mlrA3G+R0ds5oHfKCxG55N0gqJ\nP45CQAf/kukPFdwPqLkBHxP++sKxn3/L7wbFTyCa+DhSzOvosN9pAFmexQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM+ppawNxvkdHbOaB3ygsRueTdIKiT+OQkAH/5LpDxXcD6i5AR8T/vrCsZ9/y+8GxU8gmvg4Uszr6LDfaQBZnsU=", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ecdsa_enc_gcm.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "new openssh format encrypted gcm", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEz6mlrA3G+R0ds5oHfKCxG55N0gqJ\nP45CQAf/kukPFdwPqLkBHxP++sKxn3/L7wbFTyCa+DhSzOvosN9pAFmexQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM+ppawNxvkdHbOaB3ygsRueTdIKiT+OQkAH/5LpDxXcD6i5AR8T/vrCsZ9/y+8GxU8gmvg4Uszr6LDfaQBZnsU=", 6 | "private": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIHQfJ+4ZNcwSBaCR5kwrR6HjUsTF//R1F983RSTR8vbJoAoGCCqGSM49\nAwEHoUQDQgAEz6mlrA3G+R0ds5oHfKCxG55N0gqJP45CQAf/kukPFdwPqLkBHxP+\n+sKxn3/L7wbFTyCa+DhSzOvosN9pAFmexQ==\n-----END EC PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ed25519: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW 3 | QyNTUxOQAAACCyOMGts0WaAdug9NeXbGn2Jrt4wwiO64dumxV2a1IgKQAAAJBOfs+eTn7P 4 | ngAAAAtzc2gtZWQyNTUxOQAAACCyOMGts0WaAdug9NeXbGn2Jrt4wwiO64dumxV2a1IgKQ 5 | AAAEBgQKxJoToGE/Xi4UkYR+FXfin4jG8NTcZ13rJ4CDnCfLI4wa2zRZoB26D015dsafYm 6 | u3jDCI7rh26bFXZrUiApAAAAB3Rlc3RpbmcBAgMEBQY= 7 | -----END OPENSSH PRIVATE KEY----- 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ed25519.pub: -------------------------------------------------------------------------------- 1 | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILI4wa2zRZoB26D015dsafYmu3jDCI7rh26bFXZrUiAp testing 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ed25519.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-ed25519", 3 | "comment": "testing", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAsjjBrbNFmgHboPTXl2xp9ia7eMMIjuuHbpsVdmtSICk=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAC3NzaC1lZDI1NTE5AAAAILI4wa2zRZoB26D015dsafYmu3jDCI7rh26bFXZrUiAp", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_ed25519.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-ed25519", 3 | "comment": "testing", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAsjjBrbNFmgHboPTXl2xp9ia7eMMIjuuHbpsVdmtSICk=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAC3NzaC1lZDI1NTE5AAAAILI4wa2zRZoB26D015dsafYmu3jDCI7rh26bFXZrUiAp", 6 | "private": "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIGBArEmhOgYT9eLhSRhH4Vd+KfiMbw1NxnXesngIOcJ8\n-----END PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn 3 | NhAAAAAwEAAQAAAQEA4q6eZdx7LYh46PcZNcS3CnO7GuYsEJZeTj5LQSgp21IyTelaBPpr 4 | ijnMwKa+pLQt5TEobpKFFNecPdT6oPoOKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHM 5 | BNkoTFeGrursPkqYRJ0HL4CqYqRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKb 6 | zibJc64JFM7tUoK6Vl64YiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs 7 | 8zjxsf6c6N2tKXkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38 8 | KvTx3wjNQwAAA8hLhVBxS4VQcQAAAAdzc2gtcnNhAAABAQDirp5l3HstiHjo9xk1xLcKc7 9 | sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+l 10 | fQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg6 11 | 4MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u 12 | 2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28 13 | uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1DAAAAAwEAAQAAAQAmShSbZBiyYkD6KPLr 14 | MCUy8MWED6kVzDB1yvPvN5eKYmH44xe/i4UqvgSl7gR50a2G7zzDIKC2Go1brGQBWPuXRa 15 | ZtOjQygeD4rMHBiH/b7zfy4pQyKDfITTHOFXWE8ERiyL00bAZt09icCy92rQaq8IY/+U56 16 | sPPJH9UAYG9nEev8opFjAWToFDu0U2+dC+lbqLlXDqDRo75NlnDFmgUoja3y2eFr9A0Cc+ 17 | hjecrdxyJFsCJfEfaLWtBnZb886gqzzvfbHImSQtBAKERcSxuki7uxMoP67g3iQOXa65uz 18 | 8kFWRNmbQTGQttakoUaybh1t9eLpBqvVON/4Kg0THShRAAAAgFBTz2ajBK/R/crOSL9VK1 19 | f7oQv2iJTRVfnUs0r+qPGgf/a/5UwkGRj0KfEWBp3qYD+keShnPr6PDPFrm8UmIdUX8AY7 20 | 3tWT2K/JQVlzJNuINsw+DNjn4M17Z25q0LPmReRWL0nRc2w6W/hmQ/Jmqz6w8Qc4+xpeqS 21 | /HG5feliVnAAAAgQD90a+5Ky3o/2YtueqRf/3dKoiMgGB7JAOzye4dDKGABSlWuQ4N4xEI 22 | CW5MSTp7i/uobTF/tyFO3tTSyb5b2Xwbn/kLO0vgvFCdUGR2BQfN3mcT92T0Gn3JDF3Wym 23 | i2mgU6qnPf+eu+RKZQ9IiyNGny61ROUQa0R0z0pgiAfA89xwAAAIEA5KE9i6hHmigJwfD7 24 | /AGI4ujyWIVpNyrTdXG3HAPhsdoFuG5ggHggrPuuBF9wNcosrhL20VNOQGHg15gWZIVudu 25 | 0qxky4ivQs67Sk9XUjuvTnf+VubM51rIsmh4atKJFSSZo78DEcTRt8aXLrSNvGQ4WPRweM 26 | 2Z0YGfMMDM9KJKUAAAASbmV3IG9wZW5zc2ggZm9ybWF0AQ== 27 | -----END OPENSSH PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D new openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-rsa", 3 | "comment": "new openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA4q6eZdx7LYh46PcZNcS3CnO7GuYsEJZeTj5LQSgp21IyTela\nBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoOKKMe6oH/pX0BNyAEB9KFZfZgh0v4\nJ4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYqRdINy1sgDU6jUIOuDD5XZzlpDXb1\nftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64YiPgxsNXOJYMTrelVJYebtsNrJFm\nh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKXkk9G4EDKKip4g0bzDmD/fREPQ9vL\ni59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjNQwIDAQABAoIBACZKFJtkGLJiQPoo\n8uswJTLwxYQPqRXMMHXK8+83l4piYfjjF7+LhSq+BKXuBHnRrYbvPMMgoLYajVus\nZAFY+5dFpm06NDKB4PiswcGIf9vvN/LilDIoN8hNMc4VdYTwRGLIvTRsBm3T2JwL\nL3atBqrwhj/5Tnqw88kf1QBgb2cR6/yikWMBZOgUO7RTb50L6VuouVcOoNGjvk2W\ncMWaBSiNrfLZ4Wv0DQJz6GN5yt3HIkWwIl8R9ota0GdlvzzqCrPO99sciZJC0EAo\nRFxLG6SLu7Eyg/ruDeJA5drrm7PyQVZE2ZtBMZC21qShRrJuHW314ukGq9U43/gq\nDRMdKFECgYEA/dGvuSst6P9mLbnqkX/93SqIjIBgeyQDs8nuHQyhgAUpVrkODeMR\nCAluTEk6e4v7qG0xf7chTt7U0sm+W9l8G5/5CztL4LxQnVBkdgUHzd5nE/dk9Bp9\nyQxd1spotpoFOqpz3/nrvkSmUPSIsjRp8utUTlEGtEdM9KYIgHwPPccCgYEA5KE9\ni6hHmigJwfD7/AGI4ujyWIVpNyrTdXG3HAPhsdoFuG5ggHggrPuuBF9wNcosrhL2\n0VNOQGHg15gWZIVudu0qxky4ivQs67Sk9XUjuvTnf+VubM51rIsmh4atKJFSSZo7\n8DEcTRt8aXLrSNvGQ4WPRweM2Z0YGfMMDM9KJKUCgYB7Yh0b1EOjCdQv0jqWtDNB\n+dUbB6Te92jdUwHvGR7AzsGDqL2OPp0e3QbDCq3lNO0GuN3hCbKlVmj6dpuUpqpP\n+3ni3dZKzwAZGOVdAaEDkGNnL1Hh36bZvqs3KHmymjiEhiuB60mP2mtG2zg/+H6w\nWXlIANdTd32PR87GNohqLQKBgA36ic/LJy2Wuxn/iPicg2kUQxUEey1jUfCBVmfB\nGQCNywG+xem07pKFBNvBlhPD27187VhZFpS7J0snQl89BUcCMzZSpIniagizT86u\nLdQVez4HohvG98zn6SAqLNYpJHXZl0aVShywzIeJ/jbDMTkZpmv6WzNG9p1HjfoO\nhoL9AoGAUFPPZqMEr9H9ys5Iv1UrV/uhC/aIlNFV+dSzSv6o8aB/9r/lTCQZGPQp\n8RYGnepgP6R5KGc+vo8M8WubxSYh1RfwBjve1ZPYr8lBWXMk24g2zD4M2OfgzXtn\nbmrQs+ZF5FYvSdFzbDpb+GZD8marPrDxBzj7Gl6pL8cbl96WJWc=\n-----END RSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAS8H9Cyk 3 | rueA/Ue6tOb1MOAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQC8hCiCPnRs 4 | 0ucZeyn3pNYKN63dVoxbMB4Yzjs7gvo7XKDby/6GXoU/CFQ/Q9zXRxRZmFglMYh2pOD8iW 5 | dwpLBdd+GmHb4a6xxKtoPpz1+yCPYvi6nXzKPO3B9Wbg8dtTpV23l8MZDxSRUQ9HIkYHQO 6 | oOjJx/AaMdZyHZP+eYK7UqmX1+dtCzr5vvLyEABxrsoFxH/oW/iKO6cDmTxoMyFl9DfUhD 7 | TS7cL1OVBulSBav3aJPxjsCEIs6OE94wLJfFtZAPe4GqWWcC7uG1uUL5Muy2N+SfXHOHLa 8 | I5n1vozt7lIO5TqvykcqTxipKblMW4Y7Iwlhh0YKJxzH3KJ+Qkn7AAAD4GeinUMcN5H0RP 9 | KnXzIsYGq4rG+pEYNL0WyXCOFnyHzr6cASFYa/ViRVRN5H2dDoc0i2tcQStvDt2AfBxP97 10 | xbTEmRhLkKW7Sxif+bRRpNt2sO1y7ThufOZ8ZSJdbUYf9nc++k5GMZZUTtkFGhFIyhdyl+ 11 | ZReuQFrc1Fv0/JV0K72uLSMSSMvunFjnGchch98Z1t0jEuiym8AIAwFtlvRpbOOySJhHun 12 | fClEOahNvgzkgpqvviged7Gl9Kh3Fpp57ke1087WUF4hdgG2wuLqRq3Jq2kNvTKVi6+PMv 13 | Kz5cLl6beqAJpbkJCpujzrmffo5NHh94R/v8DbAWCyrkjB6NHjOPIVnKaDmXixkcJ489W3 14 | PQF0kZ9kLrNU2yP1hBLjikr1zollw6xXC5eEpUsIrNcAHrofTMCMsGKuZhlEgTNe0cEATp 15 | ycxi4gHdA6kNSDnMPwOv9rLDZDkgqCqIzxjZCWabqRHwiyoN3CrdDsJNrk8jSqF5epuzXA 16 | EjrPUvu+sgFHIWDJOij+HQCvCgmdO/W7NkL/xCEx6QagjoJhapGICnq6CXPO5vBQeK7AMV 17 | KWUPB1jdxxlHdrSUYU9v11j0SPUM51AMpWA89GZmuQbe/tK14W35VjtL9aGKsz9Ubio029 18 | O23HJXMxM9Dd6EYXAR9xMLFDTcLT03kjRlL/4XFS4fJqbTGDtuQNqRO3QK/myVAYjgnXwz 19 | X1s77WeIK3sOMwTIXaHReUiQ1Cw+WmkXOhefePT+HrkyDlJk3ikgPUy2s5QW5/d6Lmolwb 20 | mcS9JUfaai0ysP3v1bew8go/IHiUD/X9AkjkKM2kfS1NcPSi18r2721e6RqZiIHxSoyKvq 21 | yUmwiS1kUklSuhlTORBvbclbv4HTwp1iJfu/6zsMqVJc2E8H6WUw3kTeh9fhDMpTY5NArF 22 | KD2aRIYHFvOKav+0vSbQ/KqmKeiTvyZaV7q6giRxVLxBddl4+ucD+FybPJZSebRQ+0QT1j 23 | aUDSpp541zW0rX7sCiZ6sFUybCPVDM1uA5gTAP015OD/FS342gi+Y04K0jBSjlApuy6BQx 24 | sMEQbR3weMmnodbhCtbcgDZDagSFNPlDud0GJl9IWV4hO/K1f9a+Ox3G27Jq4YC2PFgTDb 25 | aYib4xAXPUHJpoWsstSjpMnfgKcS3AGRdJ/jxlKRWV/NXFf4DYIwpzITqFMF+4VqXCa2AS 26 | JWOcSxOK92UqCcZEs8RED3x9dF9E2yBBwHeuwDvH3c9x/nsM/cjDY+EE9VcEUOxF6qMOhO 27 | CiRtEihEAYM46XeFzcSOQrwWPcKu3WTv3IpnzTaofBxV065CUn 28 | -----END OPENSSH PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8hCiCPnRs0ucZeyn3pNYKN63dVoxbMB4Yzjs7gvo7XKDby/6GXoU/CFQ/Q9zXRxRZmFglMYh2pOD8iWdwpLBdd+GmHb4a6xxKtoPpz1+yCPYvi6nXzKPO3B9Wbg8dtTpV23l8MZDxSRUQ9HIkYHQOoOjJx/AaMdZyHZP+eYK7UqmX1+dtCzr5vvLyEABxrsoFxH/oW/iKO6cDmTxoMyFl9DfUhDTS7cL1OVBulSBav3aJPxjsCEIs6OE94wLJfFtZAPe4GqWWcC7uG1uUL5Muy2N+SfXHOHLaI5n1vozt7lIO5TqvykcqTxipKblMW4Y7Iwlhh0YKJxzH3KJ+Qkn7 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvIQogj50bNLnGXsp96TW\nCjet3VaMWzAeGM47O4L6O1yg28v+hl6FPwhUP0Pc10cUWZhYJTGIdqTg/IlncKSw\nXXfhph2+GuscSraD6c9fsgj2L4up18yjztwfVm4PHbU6Vdt5fDGQ8UkVEPRyJGB0\nDqDoycfwGjHWch2T/nmCu1Kpl9fnbQs6+b7y8hAAca7KBcR/6Fv4ijunA5k8aDMh\nZfQ31IQ00u3C9TlQbpUgWr92iT8Y7AhCLOjhPeMCyXxbWQD3uBqllnAu7htblC+T\nLstjfkn1xzhy2iOZ9b6M7e5SDuU6r8pHKk8YqSm5TFuGOyMJYYdGCiccx9yifkJJ\n+wIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQC8hCiCPnRs0ucZeyn3pNYKN63dVoxbMB4Yzjs7gvo7XKDby/6GXoU/CFQ/Q9zXRxRZmFglMYh2pOD8iWdwpLBdd+GmHb4a6xxKtoPpz1+yCPYvi6nXzKPO3B9Wbg8dtTpV23l8MZDxSRUQ9HIkYHQOoOjJx/AaMdZyHZP+eYK7UqmX1+dtCzr5vvLyEABxrsoFxH/oW/iKO6cDmTxoMyFl9DfUhDTS7cL1OVBulSBav3aJPxjsCEIs6OE94wLJfFtZAPe4GqWWcC7uG1uUL5Muy2N+SfXHOHLaI5n1vozt7lIO5TqvykcqTxipKblMW4Y7Iwlhh0YKJxzH3KJ+Qkn7", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-rsa", 3 | "comment": "new openssh format encrypted", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvIQogj50bNLnGXsp96TW\nCjet3VaMWzAeGM47O4L6O1yg28v+hl6FPwhUP0Pc10cUWZhYJTGIdqTg/IlncKSw\nXXfhph2+GuscSraD6c9fsgj2L4up18yjztwfVm4PHbU6Vdt5fDGQ8UkVEPRyJGB0\nDqDoycfwGjHWch2T/nmCu1Kpl9fnbQs6+b7y8hAAca7KBcR/6Fv4ijunA5k8aDMh\nZfQ31IQ00u3C9TlQbpUgWr92iT8Y7AhCLOjhPeMCyXxbWQD3uBqllnAu7htblC+T\nLstjfkn1xzhy2iOZ9b6M7e5SDuU6r8pHKk8YqSm5TFuGOyMJYYdGCiccx9yifkJJ\n+wIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQC8hCiCPnRs0ucZeyn3pNYKN63dVoxbMB4Yzjs7gvo7XKDby/6GXoU/CFQ/Q9zXRxRZmFglMYh2pOD8iWdwpLBdd+GmHb4a6xxKtoPpz1+yCPYvi6nXzKPO3B9Wbg8dtTpV23l8MZDxSRUQ9HIkYHQOoOjJx/AaMdZyHZP+eYK7UqmX1+dtCzr5vvLyEABxrsoFxH/oW/iKO6cDmTxoMyFl9DfUhDTS7cL1OVBulSBav3aJPxjsCEIs6OE94wLJfFtZAPe4GqWWcC7uG1uUL5Muy2N+SfXHOHLaI5n1vozt7lIO5TqvykcqTxipKblMW4Y7Iwlhh0YKJxzH3KJ+Qkn7", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAvIQogj50bNLnGXsp96TWCjet3VaMWzAeGM47O4L6O1yg28v+\nhl6FPwhUP0Pc10cUWZhYJTGIdqTg/IlncKSwXXfhph2+GuscSraD6c9fsgj2L4up\n18yjztwfVm4PHbU6Vdt5fDGQ8UkVEPRyJGB0DqDoycfwGjHWch2T/nmCu1Kpl9fn\nbQs6+b7y8hAAca7KBcR/6Fv4ijunA5k8aDMhZfQ31IQ00u3C9TlQbpUgWr92iT8Y\n7AhCLOjhPeMCyXxbWQD3uBqllnAu7htblC+TLstjfkn1xzhy2iOZ9b6M7e5SDuU6\nr8pHKk8YqSm5TFuGOyMJYYdGCiccx9yifkJJ+wIDAQABAoIBAD1UXX1p5iSVRHvk\nttWLOdsfHCA7DPSJpfD5/wkwZkozq112czqxu3WzNv1SDaG3zSYMyvhmsfevUka2\nSQG7gmkWHEIXwQYu4Qhpcmb5gS+BfN4g+MNtHwmoUUWkDqTilbTi7xX5ZicpWIIo\nlI3DF16++JzUwAc1mYeMmd4bF+3quh93xW7hhrcQ31+D9kzqt6nLG1d9+IVpMbhD\nnNB9zapkZHwnz6YYhb5waMOHr6U902TyGgKyjq3Z/PkMJ0zKg01roUtQs9oQOIZF\nvueF2hwyzHqeIgpqhWJl9HMpfdym6Lh2lwguK3KYwNIMFQg+gNBWruYlH6SGfylq\n0wB5xIECgYEA8FdyEDd4TbVBKIXzzmY6zYmN/Q9uiz0IjbeYYzuRxZ4a7stE/t8n\nM5UxxkqeD8rtRAQJyFDGPAhFeeOpIfzEVPG+5s72pI69+9aE/gCGA91+sOSnLoiJ\nPW1I7SouZfCeaaRQxSSIMjsCea2s6yraujGZJyPEWSkG5TijY8+vzDsCgYEAyMxX\nCYvqlRTaT5lAkRTFLqf0/NSpRoCnG7qSPUyJjxJsVfYFLv1FZCyyrA+SaIyufjoT\nKutKE31r7wre5bkjRRenIcTkR/tdNRdkWsB/ysZ9Cp43FIPTXS5gxTQxOaJyRGvJ\n9MW0m8N1pMvPIsagzoxxvzgU9ZOejs2NQ69qXUECgYBq7DxOgp7+0zhdsto4ZLqc\nXinQ/2CKiWiYw6kD3KiJZkFNIxla2iQyiplOQjv3gqvzqmg/uc+3PWbLR0EjYbRm\npfXr8P9BTk+vDky0Q79bUNrgD5lg1lVYApqDCFUD/Pw8u2FDk3EUB7SeNWnMZZBR\nbWdZRkw/7kSnDX+DFA59qQKBgG9v0AHxT4/LEdlJEOczYrcg6TqDfyosbhFaepxg\nZJstO0h9j6TjVGZi1AnfXn59TL2q10ZjbCni2krAerF9DNDkbpG0Joi4PKMhR0WC\nPam4fF6vLZxKCLxW58epzoPQ3p+QPnWEX1ZupFR/84W2PDpFAT+BDUi40y8nbnWY\n3WvBAoGADjh0hEkq3sy6oWt0m1NjGU1yxKV+geg48BFnu2LVSFv1rw1V7X8XFEYl\nP1B3sEpOOpPGuoz+r2E9PrsdMuYNOmVlRFRpe7pm7zyhzdFYBvLE2btJqv1PmxFu\ncEkrXJS/ETxkKdMaoUbYHcKiTIMi2pDrdJtg6oHcipm0yTBZkKs=\n-----END RSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc_gcm: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAAFmFlczEyOC1nY21Ab3BlbnNzaC5jb20AAAAGYmNyeXB0AA 3 | AAGAAAABBJL2YVn88iqv/H9bFiyW2PAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQAB 4 | AAABAQDMemjkha1c+2s58qzx4968svvvpbxt6EiLlyRHuqXCouTdBZeXGtVRlxpkqnnOE0 5 | ETMSQSqm1d5k1EMa7VVcTeXFQaBIc2XF0S1uIoEvNV0JXpDjiIdPmjUFuUf9oGGLKKQQMf 6 | zpymqoiHYQNhuarYd1mSb0+a+UwKxAxGeCPd95o/JfWjKO0JTr3nnEj1eTjtu0pofmchab 7 | 9HC9YbJ3JsvbdRq7Z2ZHp8uu16SflPpP2A9l+F4HN+gPOLcGxbVkVZHsLI07OpkWdxMPBU 8 | rzPF9OnCntRWoBhQ4LFHYHllTtd+/E90QXXhe1pxj8FktJiaitiz09GU5h4IWi3isNr/AA 9 | AD4Ktd9gUs9KHBmWTVFnDofcB6P1dZJsYHAapQgNXZtx5SjwgfBpP5aBLtSjN1iHFE+3XC 10 | Cofc9UJ8fbytwT7LCEQIzo3KJaOhVzgJN+lrjtFouWsw0Y1q2JONHvvNJ5A9nGjIGbp3du 11 | 4TAMSgVAvxZBEYez4ajhb2NL7TE56AjOxW4n/M2ZDJLCo11F3ON3Eq6MirHZMgGKo/lbOc 12 | SaBld7tzqknye+1fKVlnCLyu+v0KCbATBypRsMeX1+E/D8L5cMIgRSe97swqiWeG9yBhQi 13 | xahbWDpmU34nz1cxc9H7KnL1rbbOxrr4OEdMOHNBQjbLlpJpnSJ3XvEGP74zjfd5zMocgx 14 | rnqreMmY+eDEObkw33+XD5ROYJT+SW/zI+r3SeIjS3UPh0ucU5nipBvXfkUezek9i/FN1X 15 | CY7xJnAZGGKU0JSqiVW3JWXp18v8lmo3ACvXeotJfUGkwvJOeO2N4Qb7RTIzivLV5Q5Plf 16 | zHWqHE57UqDL/Ya7SrX1FaqqhOHOlS1mqPQ+/VdsOSP5fJcXN+oKoL7jPr2WlmtFjo8PKc 17 | rpgKC3DhUzvRXnNYotG7trbPOGJbBRgoxTQ06rlChoaBp7kUKqNNBxXhFQCeN0sCb90fHV 18 | c+X3Yy8oUsAIxxmCymuVV8gRzLD6OdqQRBthEUQktNJLhv4mSufwSfsLDluEc7YEOrsJhx 19 | jk57TmkFFyLj++IAKi80FnSkRfSBQF3dTSrBZ4BIHWnek8V6goxhy6lRMaFoTow2foknvr 20 | VHgiNGvimOM3ESYVcOwt3YQqbUG/7b4jRlY3nNBJcsbxGe54B8zaoLt5pQNRxUuHc3fR4R 21 | haWHR6IWsfey7jAlRzrJAVVEEj4d6yvJ4bLqWGmoim5QlrePRuRFyV4FNb8N6hJ9gvWY9f 22 | HUT9TwxArDIMzu4T1khwRoFU45XN0U6xHEPcT/pZ2C5jJSSQ5W/SyBudexjMMPRKf2EIeD 23 | gjv8vIhdtkmxHv7bapaaYeYX5gtKYl+McRollDxVC8Kr48RmOVJnK4aFBQ99Wu7SXDbwas 24 | vcvVHI+zUiRGjU01/CU/Tf4GTodAlmZIuqKmBTX/KvVj6ZiK0BsZuEl9qom+l4rlazaahY 25 | FdL5M4u0qt7rVirWJWgWzmPXZ+MCK0Fs70ORvqRGxVMilhQcWsng3ZXnHaYiBRhk31KqF+ 26 | BEPEh79OknD0okKed2YYfg8vdUR+noENybrsIleP1aKBBmQCNbKU04N/9Su+wxX8YfGhYU 27 | kPST35Wg45zER9gZGsREnON4sQTng9LHB5CrJCo/MowcZG/ycqL1mxemApZ9nYUrjA8HJi 28 | zDwRHHUtkkLNG8Cmyg== 29 | -----END OPENSSH PRIVATE KEY----- 30 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc_gcm.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMemjkha1c+2s58qzx4968svvvpbxt6EiLlyRHuqXCouTdBZeXGtVRlxpkqnnOE0ETMSQSqm1d5k1EMa7VVcTeXFQaBIc2XF0S1uIoEvNV0JXpDjiIdPmjUFuUf9oGGLKKQQMfzpymqoiHYQNhuarYd1mSb0+a+UwKxAxGeCPd95o/JfWjKO0JTr3nnEj1eTjtu0pofmchab9HC9YbJ3JsvbdRq7Z2ZHp8uu16SflPpP2A9l+F4HN+gPOLcGxbVkVZHsLI07OpkWdxMPBUrzPF9OnCntRWoBhQ4LFHYHllTtd+/E90QXXhe1pxj8FktJiaitiz09GU5h4IWi3isNr/ 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc_gcm.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzHpo5IWtXPtrOfKs8ePe\nvLL776W8behIi5ckR7qlwqLk3QWXlxrVUZcaZKp5zhNBEzEkEqptXeZNRDGu1VXE\n3lxUGgSHNlxdEtbiKBLzVdCV6Q44iHT5o1BblH/aBhiyikEDH86cpqqIh2EDYbmq\n2HdZkm9PmvlMCsQMRngj3feaPyX1oyjtCU6955xI9Xk47btKaH5nIWm/RwvWGydy\nbL23Uau2dmR6fLrtekn5T6T9gPZfheBzfoDzi3BsW1ZFWR7CyNOzqZFncTDwVK8z\nxfTpwp7UVqAYUOCxR2B5ZU7XfvxPdEF14XtacY/BZLSYmorYs9PRlOYeCFot4rDa\n/wIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDMemjkha1c+2s58qzx4968svvvpbxt6EiLlyRHuqXCouTdBZeXGtVRlxpkqnnOE0ETMSQSqm1d5k1EMa7VVcTeXFQaBIc2XF0S1uIoEvNV0JXpDjiIdPmjUFuUf9oGGLKKQQMfzpymqoiHYQNhuarYd1mSb0+a+UwKxAxGeCPd95o/JfWjKO0JTr3nnEj1eTjtu0pofmchab9HC9YbJ3JsvbdRq7Z2ZHp8uu16SflPpP2A9l+F4HN+gPOLcGxbVkVZHsLI07OpkWdxMPBUrzPF9OnCntRWoBhQ4LFHYHllTtd+/E90QXXhe1pxj8FktJiaitiz09GU5h4IWi3isNr/", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_new_rsa_enc_gcm.result: -------------------------------------------------------------------------------- 1 | [{ 2 | "type": "ssh-rsa", 3 | "comment": "new openssh format encrypted gcm", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzHpo5IWtXPtrOfKs8ePe\nvLL776W8behIi5ckR7qlwqLk3QWXlxrVUZcaZKp5zhNBEzEkEqptXeZNRDGu1VXE\n3lxUGgSHNlxdEtbiKBLzVdCV6Q44iHT5o1BblH/aBhiyikEDH86cpqqIh2EDYbmq\n2HdZkm9PmvlMCsQMRngj3feaPyX1oyjtCU6955xI9Xk47btKaH5nIWm/RwvWGydy\nbL23Uau2dmR6fLrtekn5T6T9gPZfheBzfoDzi3BsW1ZFWR7CyNOzqZFncTDwVK8z\nxfTpwp7UVqAYUOCxR2B5ZU7XfvxPdEF14XtacY/BZLSYmorYs9PRlOYeCFot4rDa\n/wIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDMemjkha1c+2s58qzx4968svvvpbxt6EiLlyRHuqXCouTdBZeXGtVRlxpkqnnOE0ETMSQSqm1d5k1EMa7VVcTeXFQaBIc2XF0S1uIoEvNV0JXpDjiIdPmjUFuUf9oGGLKKQQMfzpymqoiHYQNhuarYd1mSb0+a+UwKxAxGeCPd95o/JfWjKO0JTr3nnEj1eTjtu0pofmchab9HC9YbJ3JsvbdRq7Z2ZHp8uu16SflPpP2A9l+F4HN+gPOLcGxbVkVZHsLI07OpkWdxMPBUrzPF9OnCntRWoBhQ4LFHYHllTtd+/E90QXXhe1pxj8FktJiaitiz09GU5h4IWi3isNr/", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAzHpo5IWtXPtrOfKs8ePevLL776W8behIi5ckR7qlwqLk3QWX\nlxrVUZcaZKp5zhNBEzEkEqptXeZNRDGu1VXE3lxUGgSHNlxdEtbiKBLzVdCV6Q44\niHT5o1BblH/aBhiyikEDH86cpqqIh2EDYbmq2HdZkm9PmvlMCsQMRngj3feaPyX1\noyjtCU6955xI9Xk47btKaH5nIWm/RwvWGydybL23Uau2dmR6fLrtekn5T6T9gPZf\nheBzfoDzi3BsW1ZFWR7CyNOzqZFncTDwVK8zxfTpwp7UVqAYUOCxR2B5ZU7XfvxP\ndEF14XtacY/BZLSYmorYs9PRlOYeCFot4rDa/wIDAQABAoIBAQCCb7uluxhh7gfy\niTmFfETDvrEzqFfRDJHqadm83/WJeXvg+gY/X+CgEXHGsXDN4j5qzbgjKBBoC9dS\nHxdWA0Z4ShFkH2tZZAYDVIwj4CLVpR9b8bRiZ6wvX71rtzsPFIYf52Tkz1nif3pk\nUaBkoJm5SDkdTmBLjafSXkkuUskeeAV7gx+fzWqSpcKmhTqjnQfdlmD8OSIq4jjD\nagiHmmfBhZ4NOvF/E9UBydqFV8GNyfSFC6kC2LYmiQD1hvqNhMdYVjh99V1L3ZPq\nHMSQVAOv5WgpLTLKY8MFNBbqqp0eKhatRNA8q9O23jADDp3fubKV0aUQSrRZz0y9\nPmmEJnTRAoGBAPZoL+p+AbI5yTg01LdsaQL2f3Ieb3CGudesmjAVnI3QEoC6gxGX\n4cbmBSCY+vBzh2RJNJcS+Rq6VmJZA930Tb0npHiQYOohB7BFOCbBJ2L18g/JdNpi\nVb3wqFs9NG1GFOOV6iGtV/6t4CRTKtAbd695YZAJ5S6DDvMrH9pTnAKrAoGBANRw\nVuLfBTFhSKvFz+0W0yy6Sn0koXjpp1ifC0BWLwHiA/IZjAY7qmsNQZxWdleWLP28\nRNaac3vMJO/HFD4IyL59Zli+kREGKazvZM1dvOs0mgdVMTPMsT57wcJr5OSxqCvJ\nD3NkcgFuA1e3jVC5p/wUJCi/lhyFPx3z1C5vRqj9AoGBANeyYmd5wFBcp1ktXhvm\nqZIvZ2blX5X4ScyTSjHXaUD2qIvJORz4gGqVRl2/rMM5zoYqUwAAWtFb1mynEWyF\nBFwVzLLBaCTrnwhdv4alRK4rL6dEKadVt0ra1PVxgWg6leSXgenTDRli6bfCmdKs\niLuxnIbzMozhqv+Qe4Sp9gKbAoGBALWBThsEpXEtR2PL3P0atU7P0/jcJUIjkCF9\nsaVEfWFEdE6TWTmyHMbeSqKClRX8b3BTPRWGXQj2wNBE7Zya8LkgdyN3noZHF7Bz\n0VJNtq3XAYsmVKWHTCCwqDmu6aAj0iWm4ZabyXRDRIPbhdfk6AvOQZ63IlA34Fd9\nDlqmJF8ZAoGAIJzfMDT2LvlMOHqpKgelS4ZTHEmqqJZM5rXdsZwYqcyekjz25COE\nTJwme3xIt3kSZEcOauGHCgUVeBcE6GwZbQ1WoNIvazhnUXeErOeoxQ+ZqdfC8iyT\nUn/P27yx/FcwDdubQhbgxZ5M+pu+0OQ1WPu02LQZQrX7x4a6isYtTDo=\n-----END RSA PRIVATE KEY-----" 7 | }] 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIBvQIBAAKBgQDs+n9ZKhwYNr1V2uGn0C/2MSTM4KB4puy4jR5ubRTT1yq5SbzK 3 | RQlCjfplDN//Eqa6aiFmvGKA3RKUtPtBmD96EHW1mvr7O+Pc8z8L/4zg9tkVQR6V 4 | WBKgBhVwZHDzzs5+Ag2j54BZfcaGMcNGhTE9DcZYeI/t6FhOxgpID3EA/QIVAMyI 5 | czBU74xB48IMoamlEhc5Lh+3AoGBAMuy2h9K9+oQIPcTcsD/mtmhOYlw2ZPCJV2b 6 | WFeZ3QxAujenBzEp0oqht8tdj+BE7Er+CWT2Ab/A92MrjYUaGaPjdF5+K6CSPMUX 7 | rK8nBabSBJ+ELqTo/8vHJ2eVWIUJBwCzbw3ryitH7LD3gyEr2NuQQJE++wyWPBHK 8 | M3SFOft6AoGBAOdrYUJ38yjc9tnrvLWsB1KlkYhc+UbTMSRKfA8Yo/Xs5QldFycz 9 | bUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMnOzRVQXpUI7z2W3/Ie4/i2Lu/ 10 | xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5ciuO0ltu90L9+2YvWAhUAr/vy 11 | ahuEz4UFGhB8IIeLWQUO5FA= 12 | -----END DSA PRIVATE KEY----- 13 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa.pub: -------------------------------------------------------------------------------- 1 | ssh-dss AAAAB3NzaC1kc3MAAACBAOz6f1kqHBg2vVXa4afQL/YxJMzgoHim7LiNHm5tFNPXKrlJvMpFCUKN+mUM3/8SprpqIWa8YoDdEpS0+0GYP3oQdbWa+vs749zzPwv/jOD22RVBHpVYEqAGFXBkcPPOzn4CDaPngFl9xoYxw0aFMT0Nxlh4j+3oWE7GCkgPcQD9AAAAFQDMiHMwVO+MQePCDKGppRIXOS4ftwAAAIEAy7LaH0r36hAg9xNywP+a2aE5iXDZk8IlXZtYV5ndDEC6N6cHMSnSiqG3y12P4ETsSv4JZPYBv8D3YyuNhRoZo+N0Xn4roJI8xResrycFptIEn4QupOj/y8cnZ5VYhQkHALNvDevKK0fssPeDISvY25BAkT77DJY8EcozdIU5+3oAAACBAOdrYUJ38yjc9tnrvLWsB1KlkYhc+UbTMSRKfA8Yo/Xs5QldFyczbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMnOzRVQXpUI7z2W3/Ie4/i2Lu/xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5ciuO0ltu90L9+2YvW old openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "old openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBuDCCASwGByqGSM44BAEwggEfAoGBAOz6f1kqHBg2vVXa4afQL/YxJMzgoHim\n7LiNHm5tFNPXKrlJvMpFCUKN+mUM3/8SprpqIWa8YoDdEpS0+0GYP3oQdbWa+vs7\n49zzPwv/jOD22RVBHpVYEqAGFXBkcPPOzn4CDaPngFl9xoYxw0aFMT0Nxlh4j+3o\nWE7GCkgPcQD9AhUAzIhzMFTvjEHjwgyhqaUSFzkuH7cCgYEAy7LaH0r36hAg9xNy\nwP+a2aE5iXDZk8IlXZtYV5ndDEC6N6cHMSnSiqG3y12P4ETsSv4JZPYBv8D3YyuN\nhRoZo+N0Xn4roJI8xResrycFptIEn4QupOj/y8cnZ5VYhQkHALNvDevKK0fssPeD\nISvY25BAkT77DJY8EcozdIU5+3oDgYUAAoGBAOdrYUJ38yjc9tnrvLWsB1KlkYhc\n+UbTMSRKfA8Yo/Xs5QldFyczbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMn\nOzRVQXpUI7z2W3/Ie4/i2Lu/xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5c\niuO0ltu90L9+2YvW\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAOz6f1kqHBg2vVXa4afQL/YxJMzgoHim7LiNHm5tFNPXKrlJvMpFCUKN+mUM3/8SprpqIWa8YoDdEpS0+0GYP3oQdbWa+vs749zzPwv/jOD22RVBHpVYEqAGFXBkcPPOzn4CDaPngFl9xoYxw0aFMT0Nxlh4j+3oWE7GCkgPcQD9AAAAFQDMiHMwVO+MQePCDKGppRIXOS4ftwAAAIEAy7LaH0r36hAg9xNywP+a2aE5iXDZk8IlXZtYV5ndDEC6N6cHMSnSiqG3y12P4ETsSv4JZPYBv8D3YyuNhRoZo+N0Xn4roJI8xResrycFptIEn4QupOj/y8cnZ5VYhQkHALNvDevKK0fssPeDISvY25BAkT77DJY8EcozdIU5+3oAAACBAOdrYUJ38yjc9tnrvLWsB1KlkYhc+UbTMSRKfA8Yo/Xs5QldFyczbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMnOzRVQXpUI7z2W3/Ie4/i2Lu/xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5ciuO0ltu90L9+2YvW", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBuDCCASwGByqGSM44BAEwggEfAoGBAOz6f1kqHBg2vVXa4afQL/YxJMzgoHim\n7LiNHm5tFNPXKrlJvMpFCUKN+mUM3/8SprpqIWa8YoDdEpS0+0GYP3oQdbWa+vs7\n49zzPwv/jOD22RVBHpVYEqAGFXBkcPPOzn4CDaPngFl9xoYxw0aFMT0Nxlh4j+3o\nWE7GCkgPcQD9AhUAzIhzMFTvjEHjwgyhqaUSFzkuH7cCgYEAy7LaH0r36hAg9xNy\nwP+a2aE5iXDZk8IlXZtYV5ndDEC6N6cHMSnSiqG3y12P4ETsSv4JZPYBv8D3YyuN\nhRoZo+N0Xn4roJI8xResrycFptIEn4QupOj/y8cnZ5VYhQkHALNvDevKK0fssPeD\nISvY25BAkT77DJY8EcozdIU5+3oDgYUAAoGBAOdrYUJ38yjc9tnrvLWsB1KlkYhc\n+UbTMSRKfA8Yo/Xs5QldFyczbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMn\nOzRVQXpUI7z2W3/Ie4/i2Lu/xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5c\niuO0ltu90L9+2YvW\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAOz6f1kqHBg2vVXa4afQL/YxJMzgoHim7LiNHm5tFNPXKrlJvMpFCUKN+mUM3/8SprpqIWa8YoDdEpS0+0GYP3oQdbWa+vs749zzPwv/jOD22RVBHpVYEqAGFXBkcPPOzn4CDaPngFl9xoYxw0aFMT0Nxlh4j+3oWE7GCkgPcQD9AAAAFQDMiHMwVO+MQePCDKGppRIXOS4ftwAAAIEAy7LaH0r36hAg9xNywP+a2aE5iXDZk8IlXZtYV5ndDEC6N6cHMSnSiqG3y12P4ETsSv4JZPYBv8D3YyuNhRoZo+N0Xn4roJI8xResrycFptIEn4QupOj/y8cnZ5VYhQkHALNvDevKK0fssPeDISvY25BAkT77DJY8EcozdIU5+3oAAACBAOdrYUJ38yjc9tnrvLWsB1KlkYhc+UbTMSRKfA8Yo/Xs5QldFyczbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMnOzRVQXpUI7z2W3/Ie4/i2Lu/xXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5ciuO0ltu90L9+2YvW", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBvQIBAAKBgQDs+n9ZKhwYNr1V2uGn0C/2MSTM4KB4puy4jR5ubRTT1yq5SbzK\nRQlCjfplDN//Eqa6aiFmvGKA3RKUtPtBmD96EHW1mvr7O+Pc8z8L/4zg9tkVQR6V\nWBKgBhVwZHDzzs5+Ag2j54BZfcaGMcNGhTE9DcZYeI/t6FhOxgpID3EA/QIVAMyI\nczBU74xB48IMoamlEhc5Lh+3AoGBAMuy2h9K9+oQIPcTcsD/mtmhOYlw2ZPCJV2b\nWFeZ3QxAujenBzEp0oqht8tdj+BE7Er+CWT2Ab/A92MrjYUaGaPjdF5+K6CSPMUX\nrK8nBabSBJ+ELqTo/8vHJ2eVWIUJBwCzbw3ryitH7LD3gyEr2NuQQJE++wyWPBHK\nM3SFOft6AoGBAOdrYUJ38yjc9tnrvLWsB1KlkYhc+UbTMSRKfA8Yo/Xs5QldFycz\nbUtsFGdLvqPol0pww2LqeKUQ8zVIF56Aw3SxmPMnOzRVQXpUI7z2W3/Ie4/i2Lu/\nxXos8ZHnIu+e7SLJRHe+RGNvISbsQhk+vnpNQP5ciuO0ltu90L9+2YvWAhUAr/vy\nahuEz4UFGhB8IIeLWQUO5FA=\n-----END DSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-128-CBC,3239878D1E2D496289CE9CD2CB639BE8 4 | 5 | k8/4Ax6UcnImNvEuybHwa9OHZHeCpKmq3Cu/q29a9AkTnktAWVmU9rQFch5CweDH 6 | TEuRN+ZHecHrrMPR0fTpjXzZTxmU3549BQ2DfMSAdikPNKtBvhJwpT2se0rJ9M98 7 | p2xJQNhpxXT6f4Hy8m6QvjP5iTmlnQrrVBjV05ih9TLLQb4Y4NlydC08OyEcEoJV 8 | w43G69sv2ws/tUVr7XSUtv8l+51ywSm42Pw6YOVlMZ7y+XB/uWmFNMz5gLN17tkc 9 | wikhgvNnMWGLqb/AruuKPp5FrGRIC19DKRzDSPF5WlzLBdd2TQKDltknDj08AQMJ 10 | bDsImbePteqhU+D7GiN2pVAD2b5kCZlFzYG43/Q8R3+O2l0Lvq5VBIqNB7LyJfTy 11 | DL8XX0gzHk7FgG5MfLYin/qp7upnDXeSnIm8A2tlBYh9YzG3q/a53c5V2NomWjX0 12 | zvS+C7+w5NDwDRT5t+kecMhmHWNBuE/Pbvy0DaZQ/nnsC6TlkcaROJ0fiY3Da8E6 13 | EYvM4uKaZudsOOapwx0ZXHu2GZgLnly0p2Cd0Yf9t2UX9uySfwdL2TNw8nLVNVkh 14 | aBE/x9LkKPWqOBV8tg/9ITGys/qgZh0A1r+RGmj/tII= 15 | -----END DSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa_enc.pub: -------------------------------------------------------------------------------- 1 | ssh-dss AAAAB3NzaC1kc3MAAACBAP25RC69mW4t09jpaine5ZRHmOtqNJa2nbsRrSsZkvGXxbJ7ojxsybWf4kAAI4GpsGMzlrFrlMEpHQfebJAn+zJwGS+loR7T+gNz8JoVIgPF9dabXVymcygl4FB/sNAmV4XK3OjvSW1NCKdSkwZZr/gz5JBo1qAiQDKMD/ikWqq/AAAAFQC/rPmzFozpCeLbFQykOaDGFZaqaQAAAIEAw1hJAYQzn/ZboF/xXDHzP49uRpIIoyaSfUz5W3+Lpi/CBkOIGaGOuitwcpTfzBSZIDZ9ORs9fq5oBh29JJcAdBNgVXfzThSiGvBgU4UIj41MlG4PG6St88VXCy0niEXWmjSkdcW3hZ0ai0SOlVxxEkYneg7RH9Seh+U3rRacrh4AAACAOX41OCxx8mTuxpON/uZn6GwvK/m0K9fr/UmIX8D4Mp8PgnPLC71AOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7pLtuULoQdCgiYt1agVrioFSP6bEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n/IO5uUbWoPK5iAo= 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP25RC69mW4t09jpaine5ZRHmOtqNJa2\nnbsRrSsZkvGXxbJ7ojxsybWf4kAAI4GpsGMzlrFrlMEpHQfebJAn+zJwGS+loR7T\n+gNz8JoVIgPF9dabXVymcygl4FB/sNAmV4XK3OjvSW1NCKdSkwZZr/gz5JBo1qAi\nQDKMD/ikWqq/AhUAv6z5sxaM6Qni2xUMpDmgxhWWqmkCgYEAw1hJAYQzn/ZboF/x\nXDHzP49uRpIIoyaSfUz5W3+Lpi/CBkOIGaGOuitwcpTfzBSZIDZ9ORs9fq5oBh29\nJJcAdBNgVXfzThSiGvBgU4UIj41MlG4PG6St88VXCy0niEXWmjSkdcW3hZ0ai0SO\nlVxxEkYneg7RH9Seh+U3rRacrh4DgYQAAoGAOX41OCxx8mTuxpON/uZn6GwvK/m0\nK9fr/UmIX8D4Mp8PgnPLC71AOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7p\nLtuULoQdCgiYt1agVrioFSP6bEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n\n/IO5uUbWoPK5iAo=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAP25RC69mW4t09jpaine5ZRHmOtqNJa2nbsRrSsZkvGXxbJ7ojxsybWf4kAAI4GpsGMzlrFrlMEpHQfebJAn+zJwGS+loR7T+gNz8JoVIgPF9dabXVymcygl4FB/sNAmV4XK3OjvSW1NCKdSkwZZr/gz5JBo1qAiQDKMD/ikWqq/AAAAFQC/rPmzFozpCeLbFQykOaDGFZaqaQAAAIEAw1hJAYQzn/ZboF/xXDHzP49uRpIIoyaSfUz5W3+Lpi/CBkOIGaGOuitwcpTfzBSZIDZ9ORs9fq5oBh29JJcAdBNgVXfzThSiGvBgU4UIj41MlG4PG6St88VXCy0niEXWmjSkdcW3hZ0ai0SOlVxxEkYneg7RH9Seh+U3rRacrh4AAACAOX41OCxx8mTuxpON/uZn6GwvK/m0K9fr/UmIX8D4Mp8PgnPLC71AOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7pLtuULoQdCgiYt1agVrioFSP6bEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n/IO5uUbWoPK5iAo=", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_dsa_enc.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP25RC69mW4t09jpaine5ZRHmOtqNJa2\nnbsRrSsZkvGXxbJ7ojxsybWf4kAAI4GpsGMzlrFrlMEpHQfebJAn+zJwGS+loR7T\n+gNz8JoVIgPF9dabXVymcygl4FB/sNAmV4XK3OjvSW1NCKdSkwZZr/gz5JBo1qAi\nQDKMD/ikWqq/AhUAv6z5sxaM6Qni2xUMpDmgxhWWqmkCgYEAw1hJAYQzn/ZboF/x\nXDHzP49uRpIIoyaSfUz5W3+Lpi/CBkOIGaGOuitwcpTfzBSZIDZ9ORs9fq5oBh29\nJJcAdBNgVXfzThSiGvBgU4UIj41MlG4PG6St88VXCy0niEXWmjSkdcW3hZ0ai0SO\nlVxxEkYneg7RH9Seh+U3rRacrh4DgYQAAoGAOX41OCxx8mTuxpON/uZn6GwvK/m0\nK9fr/UmIX8D4Mp8PgnPLC71AOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7p\nLtuULoQdCgiYt1agVrioFSP6bEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n\n/IO5uUbWoPK5iAo=\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAP25RC69mW4t09jpaine5ZRHmOtqNJa2nbsRrSsZkvGXxbJ7ojxsybWf4kAAI4GpsGMzlrFrlMEpHQfebJAn+zJwGS+loR7T+gNz8JoVIgPF9dabXVymcygl4FB/sNAmV4XK3OjvSW1NCKdSkwZZr/gz5JBo1qAiQDKMD/ikWqq/AAAAFQC/rPmzFozpCeLbFQykOaDGFZaqaQAAAIEAw1hJAYQzn/ZboF/xXDHzP49uRpIIoyaSfUz5W3+Lpi/CBkOIGaGOuitwcpTfzBSZIDZ9ORs9fq5oBh29JJcAdBNgVXfzThSiGvBgU4UIj41MlG4PG6St88VXCy0niEXWmjSkdcW3hZ0ai0SOlVxxEkYneg7RH9Seh+U3rRacrh4AAACAOX41OCxx8mTuxpON/uZn6GwvK/m0K9fr/UmIX8D4Mp8PgnPLC71AOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7pLtuULoQdCgiYt1agVrioFSP6bEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n/IO5uUbWoPK5iAo=", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBvAIBAAKBgQD9uUQuvZluLdPY6Wop3uWUR5jrajSWtp27Ea0rGZLxl8Wye6I8\nbMm1n+JAACOBqbBjM5axa5TBKR0H3myQJ/sycBkvpaEe0/oDc/CaFSIDxfXWm11c\npnMoJeBQf7DQJleFytzo70ltTQinUpMGWa/4M+SQaNagIkAyjA/4pFqqvwIVAL+s\n+bMWjOkJ4tsVDKQ5oMYVlqppAoGBAMNYSQGEM5/2W6Bf8Vwx8z+PbkaSCKMmkn1M\n+Vt/i6YvwgZDiBmhjrorcHKU38wUmSA2fTkbPX6uaAYdvSSXAHQTYFV3804Uohrw\nYFOFCI+NTJRuDxukrfPFVwstJ4hF1po0pHXFt4WdGotEjpVccRJGJ3oO0R/Unofl\nN60WnK4eAoGAOX41OCxx8mTuxpON/uZn6GwvK/m0K9fr/UmIX8D4Mp8PgnPLC71A\nOwLy1HrCVi3ohCqeSY2C1uf1VWUVlSqMH85Pxc7pLtuULoQdCgiYt1agVrioFSP6\nbEyFdV8vGxA4YGh6cUSkeFZBJBrdNM4VmYBeT+3n/IO5uUbWoPK5iAoCFQCdYU1l\nO1pCZ3Jhf/YDAAnfQHAtMxAQEBAQEBAQEBAQEBAQEBA=\n-----END DSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIJx7zPcbJg1zUAsBhKbmN0eOjbr+/W2qGSZTCP/c0mz4oAoGCCqGSM49 3 | AwEHoUQDQgAELN85t86lbEONGsyPNDxD/P2f9D9/ePBT3ZpAeVYUdyrVO00jO4JE 4 | FPfKlVc4htC9oZbDaNeW1ssAIbn4uzigMQ== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCzfObfOpWxDjRrMjzQ8Q/z9n/Q/f3jwU92aQHlWFHcq1TtNIzuCRBT3ypVXOIbQvaGWw2jXltbLACG5+Ls4oDE= old openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "old openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELN85t86lbEONGsyPNDxD/P2f9D9/\nePBT3ZpAeVYUdyrVO00jO4JEFPfKlVc4htC9oZbDaNeW1ssAIbn4uzigMQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCzfObfOpWxDjRrMjzQ8Q/z9n/Q/f3jwU92aQHlWFHcq1TtNIzuCRBT3ypVXOIbQvaGWw2jXltbLACG5+Ls4oDE=", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELN85t86lbEONGsyPNDxD/P2f9D9/\nePBT3ZpAeVYUdyrVO00jO4JEFPfKlVc4htC9oZbDaNeW1ssAIbn4uzigMQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCzfObfOpWxDjRrMjzQ8Q/z9n/Q/f3jwU92aQHlWFHcq1TtNIzuCRBT3ypVXOIbQvaGWw2jXltbLACG5+Ls4oDE=", 6 | "private": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIJx7zPcbJg1zUAsBhKbmN0eOjbr+/W2qGSZTCP/c0mz4oAoGCCqGSM49\nAwEHoUQDQgAELN85t86lbEONGsyPNDxD/P2f9D9/ePBT3ZpAeVYUdyrVO00jO4JE\nFPfKlVc4htC9oZbDaNeW1ssAIbn4uzigMQ==\n-----END EC PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-128-CBC,4BE217089AE8B7311672C159E0690AB4 4 | 5 | AkqjOP53cDHrdkJFRVLHYS7fSPVcIa4BgKegLwqRUqJOvEOnn5j6RYCh2CMdPjwN 6 | rdw26Gc0V++xeMISAbrX4TGAQPWyDyiuoCffTIAfbkNq8YQR/sNJjNmZEgtCs6+O 7 | 4iBQ8TMXO+7oWRC221FDbTIhB6k4lXXph/HzdW0/Y2A= 8 | -----END EC PRIVATE KEY----- 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa_enc.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA4KgjqWJj9PR55PeF7t7PTXdx7cvMDqNkq4UTMjoXA5WtQYdoC2sxJnI5Psqvtrfa13C31gY8TlFAZ1cClnoBk= 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDgqCOpYmP09Hnk94Xu3s9Nd3Hty8\nwOo2SrhRMyOhcDla1Bh2gLazEmcjk+yq+2t9rXcLfWBjxOUUBnVwKWegGQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA4KgjqWJj9PR55PeF7t7PTXdx7cvMDqNkq4UTMjoXA5WtQYdoC2sxJnI5Psqvtrfa13C31gY8TlFAZ1cClnoBk=", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_ecdsa_enc.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ecdsa-sha2-nistp256", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDgqCOpYmP09Hnk94Xu3s9Nd3Hty8\nwOo2SrhRMyOhcDla1Bh2gLazEmcjk+yq+2t9rXcLfWBjxOUUBnVwKWegGQ==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA4KgjqWJj9PR55PeF7t7PTXdx7cvMDqNkq4UTMjoXA5WtQYdoC2sxJnI5Psqvtrfa13C31gY8TlFAZ1cClnoBk=", 6 | "private": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIA7fGKE3wZkXb6jMcMriZujktUQ6FTC0SoTAa6fKDXY8oAoGCCqGSM49\nAwEHoUQDQgAEDgqCOpYmP09Hnk94Xu3s9Nd3Hty8wOo2SrhRMyOhcDla1Bh2gLaz\nEmcjk+yq+2t9rXcLfWBjxOUUBnVwKWegGQcHBwcHBwc=\n-----END EC PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEA8wISnx2xWoeZur8yn/8NPykUY2mYyxn1n0mE5WJSo+mclFFS 3 | mnN08WCt856AO8PMPuAn9cw0j3qJe0SKTnoMYSp+4fBsq6YHOGJvlRATF9SJkSIx 4 | wBCYsMT+cf78vzhKRJrXAfJ/LWzV7b5gThHxj+Jby+fE/yePi8+Mb39UwYWGEFf+ 5 | uRxcQIeuDX/VjPNtNKQPuO+HRi67WNXPFoUNmFXv1Ymn61S5duvVCxL8XdHXHdnZ 6 | gIJ87CTlLBGPV/U9HrGJfl0AQ/jvMsvAV4IhMZMlV5QS2QigK7rkfBVe7k0NIWQ7 7 | Vwk5iunUpmUNVhKARdznvb8CJJm0ZEx4F2n8cQIDAQABAoIBAQCtZR46cSp6qWU1 8 | DnamGYyvM7W7lb6TtYtAxGnSb0z+bpPudPSXBqk8DrswqTlg674SY0nAJpyegFYX 9 | Ifn6MzYgIv10ZGR2OjrOrdZmq5ikGWCrsZWEMZNyFq5kUwivvQ+pUj72wbyjghRH 10 | 1t7K9hzCiUbtAQzc77KKlWbkrBujFSp5EPNT67j5vV29WnZFbkPdUmfkM/ca/CZc 11 | CWwvyAx19aFGyw3BsFhWQP5C9waT+QI9QZrVOA+8wTT11OcR6PT0oKdEmSYCKgHJ 12 | JuYDWZ2XX2R2d5YNoxiqIZbCqQ/ayJuLOjLgQ1mx17pUyMNP3PoZCQXOi4jZWHZZ 13 | +3/jqvJNAoGBAPmoL03KPvLVtHByEdxzPPfnonpYjfjlD4FvXgSQjdAcrTy4O06t 14 | bDf4hMgUHQmDCyUakO45wyYwP0ISapQSBWniryjR/7U7/G/dX45fKRUeNoMvpmSC 15 | qSEMAbd31Inpzuu5k0Y8p3hvoexeYlhbRkBL1ryx1LgIvC0TkWR+e6EvAoGBAPku 16 | pHcpi3t2wewmP6f1krxtOLyvVt5RKaRjZ/2gNtzLPXL6ulQR5hufYlLKgyyyf2gJ 17 | HxVFhCkfRjwVHV8qdIJc+Q4mjnjOeNfvqnzWOlSfZFegyWvOPW7hTX0/jZYGOb4I 18 | 7fzYyUPHnlu73twmshJMTzE1Ju7RdJXyLtg8xpRfAoGBAKjlyELXTWjZfP4Jnd3H 19 | NHr+gSRGHp5A0RGe9zsdVGNz0xteA/mBR9JB1grJ2K8jsXmDlIMmHskKIPGhJetQ 20 | mcr9qcRy9Yx1rZ08ZbYa2N9JllV/+hDLeII77jlh3y8CN5Ov81u0ExReaWxQmjXu 21 | YgODix4TLLboae4Q6+7Rxu/PAoGAOZ04N7kqX/ygb+qUE1Crgde7I51i93pKp5C4 22 | baMKrFhtt9UTGfcdfkuG31+lnsMSxEo/npp5KUzq319+cA+P6sh2aXguvu32cO8g 23 | O0cJK6HDAKPTjpKcD7QWR5xXL1X3KeJErI6vUnWoPsuchsiHqcVtFhKVEujpDPZ3 24 | MFY1D/8CgYBvv5mBb2kBf2/2JHp3lP/Q6LepEBkZk9dvoEU6/5xLvA5gEXR0MUj8 25 | g97Z1duGdXD/uEVRuRuOJkk4p8YmSM7t34st3lF06wdJUGcKvmZpp2ee+CdLwESi 26 | GDCwcP5pcii56TVr09uHITWei4jFm+3Ye3h092dvPyNoEiJOgk2lsg== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzAhKfHbFah5m6vzKf/w0/KRRjaZjLGfWfSYTlYlKj6ZyUUVKac3TxYK3znoA7w8w+4Cf1zDSPeol7RIpOegxhKn7h8Gyrpgc4Ym+VEBMX1ImRIjHAEJiwxP5x/vy/OEpEmtcB8n8tbNXtvmBOEfGP4lvL58T/J4+Lz4xvf1TBhYYQV/65HFxAh64Nf9WM8200pA+474dGLrtY1c8WhQ2YVe/ViafrVLl269ULEvxd0dcd2dmAgnzsJOUsEY9X9T0esYl+XQBD+O8yy8BXgiExkyVXlBLZCKAruuR8FV7uTQ0hZDtXCTmK6dSmZQ1WEoBF3Oe9vwIkmbRkTHgXafxx old openssh format 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "old openssh format", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8wISnx2xWoeZur8yn/8N\nPykUY2mYyxn1n0mE5WJSo+mclFFSmnN08WCt856AO8PMPuAn9cw0j3qJe0SKTnoM\nYSp+4fBsq6YHOGJvlRATF9SJkSIxwBCYsMT+cf78vzhKRJrXAfJ/LWzV7b5gThHx\nj+Jby+fE/yePi8+Mb39UwYWGEFf+uRxcQIeuDX/VjPNtNKQPuO+HRi67WNXPFoUN\nmFXv1Ymn61S5duvVCxL8XdHXHdnZgIJ87CTlLBGPV/U9HrGJfl0AQ/jvMsvAV4Ih\nMZMlV5QS2QigK7rkfBVe7k0NIWQ7Vwk5iunUpmUNVhKARdznvb8CJJm0ZEx4F2n8\ncQIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDzAhKfHbFah5m6vzKf/w0/KRRjaZjLGfWfSYTlYlKj6ZyUUVKac3TxYK3znoA7w8w+4Cf1zDSPeol7RIpOegxhKn7h8Gyrpgc4Ym+VEBMX1ImRIjHAEJiwxP5x/vy/OEpEmtcB8n8tbNXtvmBOEfGP4lvL58T/J4+Lz4xvf1TBhYYQV/65HFxAh64Nf9WM8200pA+474dGLrtY1c8WhQ2YVe/ViafrVLl269ULEvxd0dcd2dmAgnzsJOUsEY9X9T0esYl+XQBD+O8yy8BXgiExkyVXlBLZCKAruuR8FV7uTQ0hZDtXCTmK6dSmZQ1WEoBF3Oe9vwIkmbRkTHgXafxx", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8wISnx2xWoeZur8yn/8N\nPykUY2mYyxn1n0mE5WJSo+mclFFSmnN08WCt856AO8PMPuAn9cw0j3qJe0SKTnoM\nYSp+4fBsq6YHOGJvlRATF9SJkSIxwBCYsMT+cf78vzhKRJrXAfJ/LWzV7b5gThHx\nj+Jby+fE/yePi8+Mb39UwYWGEFf+uRxcQIeuDX/VjPNtNKQPuO+HRi67WNXPFoUN\nmFXv1Ymn61S5duvVCxL8XdHXHdnZgIJ87CTlLBGPV/U9HrGJfl0AQ/jvMsvAV4Ih\nMZMlV5QS2QigK7rkfBVe7k0NIWQ7Vwk5iunUpmUNVhKARdznvb8CJJm0ZEx4F2n8\ncQIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDzAhKfHbFah5m6vzKf/w0/KRRjaZjLGfWfSYTlYlKj6ZyUUVKac3TxYK3znoA7w8w+4Cf1zDSPeol7RIpOegxhKn7h8Gyrpgc4Ym+VEBMX1ImRIjHAEJiwxP5x/vy/OEpEmtcB8n8tbNXtvmBOEfGP4lvL58T/J4+Lz4xvf1TBhYYQV/65HFxAh64Nf9WM8200pA+474dGLrtY1c8WhQ2YVe/ViafrVLl269ULEvxd0dcd2dmAgnzsJOUsEY9X9T0esYl+XQBD+O8yy8BXgiExkyVXlBLZCKAruuR8FV7uTQ0hZDtXCTmK6dSmZQ1WEoBF3Oe9vwIkmbRkTHgXafxx", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA8wISnx2xWoeZur8yn/8NPykUY2mYyxn1n0mE5WJSo+mclFFS\nmnN08WCt856AO8PMPuAn9cw0j3qJe0SKTnoMYSp+4fBsq6YHOGJvlRATF9SJkSIx\nwBCYsMT+cf78vzhKRJrXAfJ/LWzV7b5gThHxj+Jby+fE/yePi8+Mb39UwYWGEFf+\nuRxcQIeuDX/VjPNtNKQPuO+HRi67WNXPFoUNmFXv1Ymn61S5duvVCxL8XdHXHdnZ\ngIJ87CTlLBGPV/U9HrGJfl0AQ/jvMsvAV4IhMZMlV5QS2QigK7rkfBVe7k0NIWQ7\nVwk5iunUpmUNVhKARdznvb8CJJm0ZEx4F2n8cQIDAQABAoIBAQCtZR46cSp6qWU1\nDnamGYyvM7W7lb6TtYtAxGnSb0z+bpPudPSXBqk8DrswqTlg674SY0nAJpyegFYX\nIfn6MzYgIv10ZGR2OjrOrdZmq5ikGWCrsZWEMZNyFq5kUwivvQ+pUj72wbyjghRH\n1t7K9hzCiUbtAQzc77KKlWbkrBujFSp5EPNT67j5vV29WnZFbkPdUmfkM/ca/CZc\nCWwvyAx19aFGyw3BsFhWQP5C9waT+QI9QZrVOA+8wTT11OcR6PT0oKdEmSYCKgHJ\nJuYDWZ2XX2R2d5YNoxiqIZbCqQ/ayJuLOjLgQ1mx17pUyMNP3PoZCQXOi4jZWHZZ\n+3/jqvJNAoGBAPmoL03KPvLVtHByEdxzPPfnonpYjfjlD4FvXgSQjdAcrTy4O06t\nbDf4hMgUHQmDCyUakO45wyYwP0ISapQSBWniryjR/7U7/G/dX45fKRUeNoMvpmSC\nqSEMAbd31Inpzuu5k0Y8p3hvoexeYlhbRkBL1ryx1LgIvC0TkWR+e6EvAoGBAPku\npHcpi3t2wewmP6f1krxtOLyvVt5RKaRjZ/2gNtzLPXL6ulQR5hufYlLKgyyyf2gJ\nHxVFhCkfRjwVHV8qdIJc+Q4mjnjOeNfvqnzWOlSfZFegyWvOPW7hTX0/jZYGOb4I\n7fzYyUPHnlu73twmshJMTzE1Ju7RdJXyLtg8xpRfAoGBAKjlyELXTWjZfP4Jnd3H\nNHr+gSRGHp5A0RGe9zsdVGNz0xteA/mBR9JB1grJ2K8jsXmDlIMmHskKIPGhJetQ\nmcr9qcRy9Yx1rZ08ZbYa2N9JllV/+hDLeII77jlh3y8CN5Ov81u0ExReaWxQmjXu\nYgODix4TLLboae4Q6+7Rxu/PAoGAOZ04N7kqX/ygb+qUE1Crgde7I51i93pKp5C4\nbaMKrFhtt9UTGfcdfkuG31+lnsMSxEo/npp5KUzq319+cA+P6sh2aXguvu32cO8g\nO0cJK6HDAKPTjpKcD7QWR5xXL1X3KeJErI6vUnWoPsuchsiHqcVtFhKVEujpDPZ3\nMFY1D/8CgYBvv5mBb2kBf2/2JHp3lP/Q6LepEBkZk9dvoEU6/5xLvA5gEXR0MUj8\ng97Z1duGdXD/uEVRuRuOJkk4p8YmSM7t34st3lF06wdJUGcKvmZpp2ee+CdLwESi\nGDCwcP5pcii56TVr09uHITWei4jFm+3Ye3h092dvPyNoEiJOgk2lsg==\n-----END RSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa_enc: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-128-CBC,1380F5ADA0E0B636860A6BF78D47D6B2 4 | 5 | ICLCebZN4+91mTQwByj210FD3D7kCxFA6kZ5fZ1TG34RzGynOSgUSdxPaXBHO4hC 6 | DjS7lv6vrtaXPxlz5MVAhb6n0+X1pZDu5Wh5xjtkOt9yt4YPNKkvDPazSFBTHDth 7 | jURe/aCLwXa+N5g5v1G/asb5dufA96tiPD8jjsBPm6RPq/444jAnLkid6YwTRLCk 8 | a+IZZ+sX8onOq2xJM5NhsJxCEp5yquQCdyjvBBEBk5PExvWDHz4BIkK0WDR86IX/ 9 | j4baAbTREiwP+EmVw1uogijvS+9nWPv3dQrtWwNQQNdWE2jJnsuDv44VAh1QQD7A 10 | Txz2Y2A6IyzQsDxr6fL4JidVZOeeOXagYOBceZMs4IdNVJ52LJ9fqWtH1Eavj0za 11 | c9zLgFN547l/Uqc334BQTkWhA9zGNkYJo4GCl/zjL2C6ce9gp0l6aBwSRyBmfH21 12 | pxFYqO/LQOSTbupeGzkNOpeNm/XtdOHe2N+2fiMO8hqEr6tOR4dsEUVBLCWt3tpD 13 | C4jT3TtXKvx4qPV5N0w/umgXDd01Npk02k+wiQRnPBczFYLfRpceV/7MGtttV86/ 14 | Ldl2p00q+JB6TzkHfOa4dA8oZJAwz3RPwmGYt/riJS4JOIpQGCs9lU3zgi7NTt4L 15 | T9YAlAP3fjG1n3vy1uktKfRa+AoSqgS/pTJgB2srs6vxw3kt/V825cVyzSfGdQM/ 16 | 2oinmrbMAs0tRpTiHyqc/FjVRTW/8+LoSv/o6ZpN2x4jxkW/7cBH0Pcytvw8svd2 17 | Q+h92cfHuiNWi5tuiUkeDfjWEXo6ssVFA2t1ebTOk5y2wwPVAURf/jVxhEpFm4iY 18 | PCIqwCwNSs1S05zAaIQ39ltBETj4Y46715GuYKsqLDYhv2lAIAlWXWgQ/N0tYVS6 19 | Oi/Qp9XFSEeyym5vzX/2ck1SJePvHvHewiABJjYzq3wlvIdWE6V3tJ3MRXRhlKNf 20 | 4bG8caItSG1n/QIeguNZI+A2Pu8AIdKjjKsnVcn3mikuKfcCAICZwf6m3Bd+Al7G 21 | lrsJxyPqhhbPN1/t0w30tu8QuTSV+uMx4ZCKoUc6yJMQRmoM0RJ626re51IT2ikk 22 | gB4f3Ms1VbB176it2L/zbXUAaxeE7Cbdcp/5058ksbuE0yA7JB+a2vQHFqw8Xxsb 23 | qdKc4m4jkCdvaA5oNnGoG4milYukp1WVCGJeLD7gspTHR5dDYsOQgHvkxu+Ukor+ 24 | 0+1yvf8R6pRJWMoV0VvNkuSBUqcx94A+xLaEYCkB78Koum8xlPA1OA7VVkMVjQSk 25 | r6c/iANbNV20IVz1TBpg9J1rQOGisbE43yRkH+aMgHnAnhk+UgK584QOH6eJpGZT 26 | yBwes57P1kgT5VubavoJbeZLL6B70Sn/sKoLzxxruzPKmsmufJNK9klB7lu5f4gj 27 | lvKtuNaiWbux1+fQmU+05nM1WW7s5Nm9MVUCfS5RxUq8SRqC7W17ouHEssW6mJT1 28 | jHK1xhoxX05X/T0NfdPzbG7S7+DG18Q6jnyHb28LeKLXv33sEUrT5z7+Nx4JS4XM 29 | ZeMzPdRgYJw9vLQSYdksj0cNBb8UpAiG410lICrbPGWJh9d2KzhNKlfk/vLHia1V 30 | -----END RSA PRIVATE KEY----- 31 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa_enc.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHLfm98g0aHjbQJcjbamutwkWTMY426a4IdwGrpAOv806h6wBXNcOj2VJbgeQ2/XkQ0RY78fGrHSacaadGsT9E5sRGyvkr/WtDpBokXrgpP15OvhfTaSMVTcty6qknndpu7P5nmSipdn9fQR9TyNRyAajhn+UINuquGfxyLL30W4IBqSISOcXKc0pScTdMOIOmkxxY+vQFydQpWF0a3TopKKa4b3sQJgqc0MJkREllT6U+0U4+YufoW6zZyMNIS2gxWUlGUiA5XveWSaYIXCaPQmps4WoO9AlrM7z1sTcG5yXn0kEUvTmBYUOUlffiBgXzArt4Pmm8gVklR5UH98y5 2 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa_enc.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxy35vfINGh420CXI22pr\nrcJFkzGONumuCHcBq6QDr/NOoesAVzXDo9lSW4HkNv15ENEWO/Hxqx0mnGmnRrE/\nRObERsr5K/1rQ6QaJF64KT9eTr4X02kjFU3LcuqpJ53abuz+Z5koqXZ/X0EfU8jU\ncgGo4Z/lCDbqrhn8ciy99FuCAakiEjnFynNKUnE3TDiDppMcWPr0BcnUKVhdGt06\nKSimuG97ECYKnNDCZERJZU+lPtFOPmLn6Fus2cjDSEtoMVlJRlIgOV73lkmmCFwm\nj0JqbOFqDvQJazO89bE3Bucl59JBFL05gWFDlJX34gYF8wK7eD5pvIFZJUeVB/fM\nuQIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDHLfm98g0aHjbQJcjbamutwkWTMY426a4IdwGrpAOv806h6wBXNcOj2VJbgeQ2/XkQ0RY78fGrHSacaadGsT9E5sRGyvkr/WtDpBokXrgpP15OvhfTaSMVTcty6qknndpu7P5nmSipdn9fQR9TyNRyAajhn+UINuquGfxyLL30W4IBqSISOcXKc0pScTdMOIOmkxxY+vQFydQpWF0a3TopKKa4b3sQJgqc0MJkREllT6U+0U4+YufoW6zZyMNIS2gxWUlGUiA5XveWSaYIXCaPQmps4WoO9AlrM7z1sTcG5yXn0kEUvTmBYUOUlffiBgXzArt4Pmm8gVklR5UH98y5", 6 | "private": null 7 | } 8 | 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/openssh_old_rsa_enc.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxy35vfINGh420CXI22pr\nrcJFkzGONumuCHcBq6QDr/NOoesAVzXDo9lSW4HkNv15ENEWO/Hxqx0mnGmnRrE/\nRObERsr5K/1rQ6QaJF64KT9eTr4X02kjFU3LcuqpJ53abuz+Z5koqXZ/X0EfU8jU\ncgGo4Z/lCDbqrhn8ciy99FuCAakiEjnFynNKUnE3TDiDppMcWPr0BcnUKVhdGt06\nKSimuG97ECYKnNDCZERJZU+lPtFOPmLn6Fus2cjDSEtoMVlJRlIgOV73lkmmCFwm\nj0JqbOFqDvQJazO89bE3Bucl59JBFL05gWFDlJX34gYF8wK7eD5pvIFZJUeVB/fM\nuQIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDHLfm98g0aHjbQJcjbamutwkWTMY426a4IdwGrpAOv806h6wBXNcOj2VJbgeQ2/XkQ0RY78fGrHSacaadGsT9E5sRGyvkr/WtDpBokXrgpP15OvhfTaSMVTcty6qknndpu7P5nmSipdn9fQR9TyNRyAajhn+UINuquGfxyLL30W4IBqSISOcXKc0pScTdMOIOmkxxY+vQFydQpWF0a3TopKKa4b3sQJgqc0MJkREllT6U+0U4+YufoW6zZyMNIS2gxWUlGUiA5XveWSaYIXCaPQmps4WoO9AlrM7z1sTcG5yXn0kEUvTmBYUOUlffiBgXzArt4Pmm8gVklR5UH98y5", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAxy35vfINGh420CXI22prrcJFkzGONumuCHcBq6QDr/NOoesA\nVzXDo9lSW4HkNv15ENEWO/Hxqx0mnGmnRrE/RObERsr5K/1rQ6QaJF64KT9eTr4X\n02kjFU3LcuqpJ53abuz+Z5koqXZ/X0EfU8jUcgGo4Z/lCDbqrhn8ciy99FuCAaki\nEjnFynNKUnE3TDiDppMcWPr0BcnUKVhdGt06KSimuG97ECYKnNDCZERJZU+lPtFO\nPmLn6Fus2cjDSEtoMVlJRlIgOV73lkmmCFwmj0JqbOFqDvQJazO89bE3Bucl59JB\nFL05gWFDlJX34gYF8wK7eD5pvIFZJUeVB/fMuQIDAQABAoIBAGuSfhZDGyZm+Q2T\nypYONNekW7Uyh29K5640r9dGfqNRkb9LT2TKab4dSiiXz2yPmwolEpAPjIjw9oB1\nY11/rv8Eby8YwlgqxvrCL0hDS80jJ0j5y55nYwZHfMC00eTOkUFlh8Tl6BsWH5aP\ncl7q0So9kTtCAw1bs4WSDVCQr4q/x7fZRQWeWudi4IjnCv5vn1Pgot7XxDwdFNQG\nDrkUHvYXv0M2OCdl7YN0D/bHQon5ney0YU10mtqGbkcEmu0woykW1Bc539b9AoD3\nxI6LVyY6/OEwGu5ctKolIVJjsguwfLJ9WR7SenR5nTzjJyxMdSfXtXkKPX2NZxpO\nziNYnm0CgYEA/afEFBu5Ld/TjYatdf7ezZe9iDx6vBzWmMtwkhr3OHCzVP1OIaB0\nSTsCWrTdoLFTMOizUHjj71vX5v5G4aCgaMXQnSDf13mxrFzR36w5oyJOBLjkHhol\nf0ROO7QCXK1hjBAUvnKwLPQvx1CAkDB9z+cT/BJwRCarfeLhrd/sGEMCgYEAyQVN\nOGIdRVBs3Q/8dbtaz+7LOv6IBZm2y9TKHKmfBm1txAsgkqRl7cfVTyczgAZfS/RB\nzrAje5UA+phCSPtyb5B+K1i/eHw7xDZrw8wauAKY8ILSadS9ZA0mU+7XCqsWhNqN\nrvuB5dttsTDgyXnMxCbYqCWAcyKn8jBh1cDo5VMCgYBe3iMQnjnI9YCK2wb/LZ6o\n6Aqj7HK+7k44gUYN7vXtbwEzVTWmj/tN9DryL9kAI7IIhc+i1kPxnrkGFK3v7wJv\njSRzz/rH/SS9YU3BSQmZgNgLHhd7Rq4lhid4Xt/PR61HFDCd9gj8FyvTcMFUrD4x\nxqwLx92jL49OGs/rFueXPwKBgBi46jJQ/sCTj4/wc2AXVqfT+nKa8yedK/oNhX3Y\n7pHfy2wc4jimt1JzDSza6V6JahbxR1agGv0L6j7nkt9e7UgDQUEbfRDYVpFfEAnY\nhEC1MRIDRNV3MIOpilkwOoo5WF+mcV5f2C3ouqjcFgkxTZmiHWswkYeXb4g9owqi\n2wG5AoGAb6/btpj3Ql+qYXRUH/cWPlLeFbKiGaAJ+Kn5RwlEW8D//FjKuV7fL7BN\nhvaDJUpwP9klNRny3IK6FWuFI0KDup0nyrIbS07h2rOCl/+g2erDuS5sofpu2zWU\nZDArpSmpU9EF6S8CvbbZmYvWzYUhYD/sEqIR+KSowNM4PA7g7fwKCgoKCgoKCgoK\n-----END RSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_dsa_enc: -------------------------------------------------------------------------------- 1 | PuTTY-User-Key-File-2: ssh-dss 2 | Encryption: aes256-cbc 3 | Comment: dsa-key-20141202 4 | Public-Lines: 10 5 | AAAAB3NzaC1kc3MAAACBAJn2I8YefRo3BsEeinQt8KQ4cEyArAs7Y/W733oRSYOI 6 | zWF1Ju124ysKrmg2okv+05CYcjV3Yp4AzQeomYAlgmB/7xCEnWaEnxCwAxmrrJMm 7 | PrkwNjHOIi7yM5QOE90IM/Q+IJA4EPBfSb+Xr8fYhrp53KNHVSnc2KkOqpo2FsIj 8 | AAAAFQC4NlP50GqyUqq2B82Vh/w5j3TzwQAAAIAeSGom9LLNdzcwCHnGfxKNnEz3 9 | 55KITADTxiIpBvnQW+eDHwQvIw6V2Oc73bKCu5ZirZmIMW5w6KjQVwkuQBoF9Koq 10 | /2u6VeevtL9pD6TBzSLMVw5pV3PmE4/C/eLiaUxZLIHdbzpqPkAvAUBrXKkj0ijz 11 | cNzCp1fuF8H0pvR8yQAAAIAmvV+kqWhUgDYwNNz1qDaoS8XdsOponutZ/0stRQ66 12 | mKAy8kNVNNQ6oUx1XFl1WUt4iyFY/2Rz2fZhLz5/TbZRK5ygo666WgnxB/Ud4GAx 13 | /BPQTghOJJOL00vJk+8jVCGNDc942V6nFXznDMXwqxhRCW6dm+2lTh7ntrli8mCk 14 | 5g== 15 | Private-Lines: 1 16 | BytvbK+jNyMjiVxCO5lcE4YbW7q293oC+LZjkZ8Ajlw= 17 | Private-MAC: c3da536ea28851fc32d5d1ff01498c8fcebc1170 18 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_dsa_enc.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-dss", 3 | "comment": "dsa-key-20141202", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBtjCCASsGByqGSM44BAEwggEeAoGBAJn2I8YefRo3BsEeinQt8KQ4cEyArAs7\nY/W733oRSYOIzWF1Ju124ysKrmg2okv+05CYcjV3Yp4AzQeomYAlgmB/7xCEnWaE\nnxCwAxmrrJMmPrkwNjHOIi7yM5QOE90IM/Q+IJA4EPBfSb+Xr8fYhrp53KNHVSnc\n2KkOqpo2FsIjAhUAuDZT+dBqslKqtgfNlYf8OY9088ECgYAeSGom9LLNdzcwCHnG\nfxKNnEz355KITADTxiIpBvnQW+eDHwQvIw6V2Oc73bKCu5ZirZmIMW5w6KjQVwku\nQBoF9Koq/2u6VeevtL9pD6TBzSLMVw5pV3PmE4/C/eLiaUxZLIHdbzpqPkAvAUBr\nXKkj0ijzcNzCp1fuF8H0pvR8yQOBhAACgYAmvV+kqWhUgDYwNNz1qDaoS8XdsOpo\nnutZ/0stRQ66mKAy8kNVNNQ6oUx1XFl1WUt4iyFY/2Rz2fZhLz5/TbZRK5ygo666\nWgnxB/Ud4GAx/BPQTghOJJOL00vJk+8jVCGNDc942V6nFXznDMXwqxhRCW6dm+2l\nTh7ntrli8mCk5g==\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1kc3MAAACBAJn2I8YefRo3BsEeinQt8KQ4cEyArAs7Y/W733oRSYOIzWF1Ju124ysKrmg2okv+05CYcjV3Yp4AzQeomYAlgmB/7xCEnWaEnxCwAxmrrJMmPrkwNjHOIi7yM5QOE90IM/Q+IJA4EPBfSb+Xr8fYhrp53KNHVSnc2KkOqpo2FsIjAAAAFQC4NlP50GqyUqq2B82Vh/w5j3TzwQAAAIAeSGom9LLNdzcwCHnGfxKNnEz355KITADTxiIpBvnQW+eDHwQvIw6V2Oc73bKCu5ZirZmIMW5w6KjQVwkuQBoF9Koq/2u6VeevtL9pD6TBzSLMVw5pV3PmE4/C/eLiaUxZLIHdbzpqPkAvAUBrXKkj0ijzcNzCp1fuF8H0pvR8yQAAAIAmvV+kqWhUgDYwNNz1qDaoS8XdsOponutZ/0stRQ66mKAy8kNVNNQ6oUx1XFl1WUt4iyFY/2Rz2fZhLz5/TbZRK5ygo666WgnxB/Ud4GAx/BPQTghOJJOL00vJk+8jVCGNDc942V6nFXznDMXwqxhRCW6dm+2lTh7ntrli8mCk5g==", 6 | "private": "-----BEGIN DSA PRIVATE KEY-----\nMIIBugIBAAKBgQCZ9iPGHn0aNwbBHop0LfCkOHBMgKwLO2P1u996EUmDiM1hdSbt\nduMrCq5oNqJL/tOQmHI1d2KeAM0HqJmAJYJgf+8QhJ1mhJ8QsAMZq6yTJj65MDYx\nziIu8jOUDhPdCDP0PiCQOBDwX0m/l6/H2Ia6edyjR1Up3NipDqqaNhbCIwIVALg2\nU/nQarJSqrYHzZWH/DmPdPPBAoGAHkhqJvSyzXc3MAh5xn8SjZxM9+eSiEwA08Yi\nKQb50Fvngx8ELyMOldjnO92ygruWYq2ZiDFucOio0FcJLkAaBfSqKv9rulXnr7S/\naQ+kwc0izFcOaVdz5hOPwv3i4mlMWSyB3W86aj5ALwFAa1ypI9Io83DcwqdX7hfB\n9Kb0fMkCgYAmvV+kqWhUgDYwNNz1qDaoS8XdsOponutZ/0stRQ66mKAy8kNVNNQ6\noUx1XFl1WUt4iyFY/2Rz2fZhLz5/TbZRK5ygo666WgnxB/Ud4GAx/BPQTghOJJOL\n00vJk+8jVCGNDc942V6nFXznDMXwqxhRCW6dm+2lTh7ntrli8mCk5gIUCJZKAMAz\nkyr2vl2Pe48adi8Vs9s=\n-----END DSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_rsa: -------------------------------------------------------------------------------- 1 | PuTTY-User-Key-File-2: ssh-rsa 2 | Encryption: none 3 | Comment: rsa-key-20150522 4 | Public-Lines: 6 5 | AAAAB3NzaC1yc2EAAAABJQAAAQB1quqP0rhl78NOLD4lj+1x5FGAqZ3aqo6GiEPz 6 | KOaQmy86FuJMK0nHj3gUKTa/Kvaa+8PZyeu+uVseHg47YrynCOcJEEnpqvbArc8M 7 | xMWuUnTUMrjvokGDOBBiQu4UAE4bybpgXkNHJfbrcDVgivmv3Ikn8PVIZ1rLBMLZ 8 | 6Lzn0rjPjFD0X4WqsAJW2SFiZnsjMZtVL2TWadNTyyfjjm2NCRBvd32VLohkSe9Q 9 | BZBD6MW8YQyBKUnEF/7WNY0eehDVrfx1YqPOV1bDwFUhRaAYpLDLDR0KCAPvx7qb 10 | 8G5Cq0TIBsEr3H8ztNRcOTQoaKgn0T18M7cyS4ykoNLYW4Zx 11 | Private-Lines: 14 12 | AAABACyF3DZraF3sBLXLjSL4MFSblHXfUHxAiPSiQzlpa/9dUCPRTrUJddzOgHZU 13 | yJtcXU9mLm4VDRe7wZyxbSs6Hd5WZUGzIuLLEUH8k4hKdE/MLDSdkhV7qhX5iaij 14 | tAeRaammRoVUGXTd7rnzGx2cXnnkvkZ22VmqkQ6MLg1DTmWNfOO9cdwFGdQawf/n 15 | yUV0nTkWsHXy5Qrozq9wRFk8eyw+pFllxqavsNftZX8VDiQt27JLZPTU4LGkH660 16 | 3gq1KhNS/l05TlXnMZGjlcPN8UEaBzmCWRezhJSttjs5Kgp1K3yDf4ozMR/HWOCj 17 | Jq8fd3VIgli6ML8yjr/c0A0T9MUAAACBAL1/byxHiCvY/2C+/L5T+ZZq13jdZuYK 18 | MmOFaNITgEdNGWSIFYRzhLKGXj7awQWOIW6chj470GNOfQjFL1TvXhbwfqW6esDa 19 | kETOYQPYQHZijABcn7uurMUm/bu5x/z9gYkAfniOCI5vmvMvJ09JcZ0iUmFWDZZY 20 | fAutBvrt+n/vAAAAgQCe9jrA51wn1/wzKmWF+2+OWFUG9usheIcEbHB8mxLguLfU 21 | +x4i+2vLo0FtXEPAw+Bt7Tge4t0m6USiVZXtW/QKsh0kMj4mNVHFz+XXw4l1QOYv 22 | n5TjnLepiP7majXv4GHI2eOcHkyly4sIkj4jNLYqvT86hMxW4IC+jtJEWhn/nwAA 23 | AIEAlJ8cExu2WrWukTDJQHrVegtvdJUhNjol2wLucPuWwSxKuB8FHYwaPRYRkf3d 24 | DkZ53hhjJZ0BVkAaQ28uqM09xKD+q1H4/r0nnbtlV4uHLl3cCD5mGrH8I/iDPJX4 25 | fFIqCa0+n1D6RzvDqs1QIu+PGSp0K6vHOOS5fP0ZpuT025E= 26 | Private-MAC: 4ca26008c85b901f4d2766b0924c25e527678d7e 27 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_rsa.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "rsa-key-20150522", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBHzANBgkqhkiG9w0BAQEFAAOCAQwAMIIBBwKCAQB1quqP0rhl78NOLD4lj+1x\n5FGAqZ3aqo6GiEPzKOaQmy86FuJMK0nHj3gUKTa/Kvaa+8PZyeu+uVseHg47Yryn\nCOcJEEnpqvbArc8MxMWuUnTUMrjvokGDOBBiQu4UAE4bybpgXkNHJfbrcDVgivmv\n3Ikn8PVIZ1rLBMLZ6Lzn0rjPjFD0X4WqsAJW2SFiZnsjMZtVL2TWadNTyyfjjm2N\nCRBvd32VLohkSe9QBZBD6MW8YQyBKUnEF/7WNY0eehDVrfx1YqPOV1bDwFUhRaAY\npLDLDR0KCAPvx7qb8G5Cq0TIBsEr3H8ztNRcOTQoaKgn0T18M7cyS4ykoNLYW4Zx\nAgEl\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAABJQAAAQB1quqP0rhl78NOLD4lj+1x5FGAqZ3aqo6GiEPzKOaQmy86FuJMK0nHj3gUKTa/Kvaa+8PZyeu+uVseHg47YrynCOcJEEnpqvbArc8MxMWuUnTUMrjvokGDOBBiQu4UAE4bybpgXkNHJfbrcDVgivmv3Ikn8PVIZ1rLBMLZ6Lzn0rjPjFD0X4WqsAJW2SFiZnsjMZtVL2TWadNTyyfjjm2NCRBvd32VLohkSe9QBZBD6MW8YQyBKUnEF/7WNY0eehDVrfx1YqPOV1bDwFUhRaAYpLDLDR0KCAPvx7qb8G5Cq0TIBsEr3H8ztNRcOTQoaKgn0T18M7cyS4ykoNLYW4Zx", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIIEoAIBAAKCAQB1quqP0rhl78NOLD4lj+1x5FGAqZ3aqo6GiEPzKOaQmy86FuJM\nK0nHj3gUKTa/Kvaa+8PZyeu+uVseHg47YrynCOcJEEnpqvbArc8MxMWuUnTUMrjv\nokGDOBBiQu4UAE4bybpgXkNHJfbrcDVgivmv3Ikn8PVIZ1rLBMLZ6Lzn0rjPjFD0\nX4WqsAJW2SFiZnsjMZtVL2TWadNTyyfjjm2NCRBvd32VLohkSe9QBZBD6MW8YQyB\nKUnEF/7WNY0eehDVrfx1YqPOV1bDwFUhRaAYpLDLDR0KCAPvx7qb8G5Cq0TIBsEr\n3H8ztNRcOTQoaKgn0T18M7cyS4ykoNLYW4ZxAgElAoIBACyF3DZraF3sBLXLjSL4\nMFSblHXfUHxAiPSiQzlpa/9dUCPRTrUJddzOgHZUyJtcXU9mLm4VDRe7wZyxbSs6\nHd5WZUGzIuLLEUH8k4hKdE/MLDSdkhV7qhX5iaijtAeRaammRoVUGXTd7rnzGx2c\nXnnkvkZ22VmqkQ6MLg1DTmWNfOO9cdwFGdQawf/nyUV0nTkWsHXy5Qrozq9wRFk8\neyw+pFllxqavsNftZX8VDiQt27JLZPTU4LGkH6603gq1KhNS/l05TlXnMZGjlcPN\n8UEaBzmCWRezhJSttjs5Kgp1K3yDf4ozMR/HWOCjJq8fd3VIgli6ML8yjr/c0A0T\n9MUCgYEAvX9vLEeIK9j/YL78vlP5lmrXeN1m5goyY4Vo0hOAR00ZZIgVhHOEsoZe\nPtrBBY4hbpyGPjvQY059CMUvVO9eFvB+pbp6wNqQRM5hA9hAdmKMAFyfu66sxSb9\nu7nH/P2BiQB+eI4Ijm+a8y8nT0lxnSJSYVYNllh8C60G+u36f+8CgYEAnvY6wOdc\nJ9f8MyplhftvjlhVBvbrIXiHBGxwfJsS4Li31PseIvtry6NBbVxDwMPgbe04HuLd\nJulEolWV7Vv0CrIdJDI+JjVRxc/l18OJdUDmL5+U45y3qYj+5mo17+BhyNnjnB5M\npcuLCJI+IzS2Kr0/OoTMVuCAvo7SRFoZ/58CgYBM0sw0i7O+v8F6P5blYFBtaZWf\ns7QYEfjAkAfmdpvJ4Px03Tkn284DL439zk5AhbqGydWO2fqJH9HTH4HkKbCF1x6W\nNtfRpLcHIzwWUMAv/nAb0oXyJDg0QD1Z8V7qBehn+UgHXCz7eVp+Q4x6FtsIWgW4\nwgWCI99DAPT98cZrNwKBgBEvYEw0sAROs3snLZHxqzH7tipENRhgDpixxvi20ZvA\n8Ud1GAPIJ1RJACd/mJ83xTxQ/yXvAybNHC05r1fuQ+V7ChHAPhH37SokUDMAYeMp\nnFgs7YBj+C4A+PZQq+KUzE0Qovwe84eLoFP0ImSrwKqsrOO7VFxrTDBGyp+bCbrF\nAoGBAJSfHBMbtlq1rpEwyUB61XoLb3SVITY6JdsC7nD7lsEsSrgfBR2MGj0WEZH9\n3Q5Ged4YYyWdAVZAGkNvLqjNPcSg/qtR+P69J527ZVeLhy5d3Ag+Zhqx/CP4gzyV\n+HxSKgmtPp9Q+kc7w6rNUCLvjxkqdCurxzjkuXz9Gabk9NuR\n-----END RSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_rsa_enc: -------------------------------------------------------------------------------- 1 | PuTTY-User-Key-File-2: ssh-rsa 2 | Encryption: aes256-cbc 3 | Comment: rsa-key-20141119 4 | Public-Lines: 4 5 | AAAAB3NzaC1yc2EAAAABJQAAAIBrBWETAVAyJmuNG53jwTNDlbIcH5lrEvcx6lx5 6 | bM6EKg0XmOIH96VqUjS7eRRTTD9lpBA8hYhkrOjOx93/JWB/pcVN8/B3DYHshT9O 7 | BW1DCkrNwut2pbJ2oZOBirhhAr+xqWFr3551FqbzaCIXpOKubr4EcIwCipBl6PxL 8 | USfHgw== 9 | Private-Lines: 8 10 | 8O3NrBePR4+4RHHys8wrRKCmgx3Gsdz1cKoRJJDgnnrQxuAxBTVUlVTC2vzSOXrP 11 | jlKdRP9DbtrL5YF8g9HkMPpzzTdgpiEAGikpIc+L0sJhN+S9VvMoXRRKqyuB7o1C 12 | xZhAeRaZ68izdUUbFd7ajUwBNpGoFppOznGXyf/3/Ao9FfoTKReZzeBd/e2/JFhc 13 | nsYkSbtWfKQBVXF1Fhr10UwRWSMaVJSDkcSuk8ghICoKBBCgRBnZFap0SR77oIJh 14 | DKgmNFktoKzEqh111vYPhQyEEyGNxpD0aEPaGUJEjPEd3C5a46n7mIiqrNX7QJoo 15 | xxZtkueGdXWaoe5mBf1tFc+nCA1l72nUlghJZooQhnO9NPpieu6NNZ8X+tFQ1Rq/ 16 | xvOZHzpDOOeOgWdV7oAmRDbDjYPh0H67z2OKCFaP0Z9kgmnwqV2IJvTDrexj1VwY 17 | 6kFaPldnK+ohXl37oVIlWA== 18 | Private-MAC: 9d09a15a122e48955682ba969d33c75ba8e4be2c 19 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/ppk_rsa_enc.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "rsa-key-20141119", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIGcMA0GCSqGSIb3DQEBAQUAA4GKADCBhgKBgGsFYRMBUDIma40bnePBM0OVshwf\nmWsS9zHqXHlszoQqDReY4gf3pWpSNLt5FFNMP2WkEDyFiGSs6M7H3f8lYH+lxU3z\n8HcNgeyFP04FbUMKSs3C63alsnahk4GKuGECv7GpYWvfnnUWpvNoIhek4q5uvgRw\njAKKkGXo/EtRJ8eDAgEl\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAABJQAAAIBrBWETAVAyJmuNG53jwTNDlbIcH5lrEvcx6lx5bM6EKg0XmOIH96VqUjS7eRRTTD9lpBA8hYhkrOjOx93/JWB/pcVN8/B3DYHshT9OBW1DCkrNwut2pbJ2oZOBirhhAr+xqWFr3551FqbzaCIXpOKubr4EcIwCipBl6PxLUSfHgw==", 6 | "private": "-----BEGIN RSA PRIVATE KEY-----\nMIICWQIBAAKBgGsFYRMBUDIma40bnePBM0OVshwfmWsS9zHqXHlszoQqDReY4gf3\npWpSNLt5FFNMP2WkEDyFiGSs6M7H3f8lYH+lxU3z8HcNgeyFP04FbUMKSs3C63al\nsnahk4GKuGECv7GpYWvfnnUWpvNoIhek4q5uvgRwjAKKkGXo/EtRJ8eDAgElAoGA\nU+GfHLvXEozQ1mHA8MfcEmCShL7SMVQN2wPL8HfgImYl7+aHpWE8de1nmdtwy6p2\n4PY2PUYQ9PY57i3zL8NZd8WQ7Rg0RBHDlndaFeF4Ef0uLboqYd/xN0rzfy55z7hW\nOL+8VhoxTrBUvveOhZwBPkOeHfxmkVz3xbbrg3kNlo0CQQDJYPKtCs/l46KJmN3l\nUANdI4QIuWQ+Zllz7p94FfdotnkvqG++Bp1wOqJSCih6UViwLfvpNZtGMCtk46WN\nhc0zAkEAiAyN4WUs/0x4WovG956J1A+uSEKeWzuqfpGGbWgZ9XfnPnk+1Al8FOW1\ntu9WWrMPIavQnZW/dXxhkeNWTH78cQJBALkM+qzZgMVpZO0ksDqA4H8Zt5lQafQm\nsxCWFf+le5CnraFqWNghwRsFcpCTtn486bamy89hsUdqiL2S6ygaFoECQFDk3r1e\nwM8mjMA3b2LM+AGMyH3+GPf59qwfLVXPMgeTZubgTt7w4f6WbAvoQS8Crw0aDVbH\nvfLUVbCwr9p1BM0CQFSBjCa/fzeICVkPFBaKQUmXjQ3IcPTOr90mSAiPnAAppSwT\nj5SYSfE9rSVb+EhQ0hk2VKWIfocNHBD1MAN9zb4=\n-----END RSA PRIVATE KEY-----" 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | Comment: "2048-bit RSA" 3 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 4 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 5 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 6 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 7 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 8 | 9lK/C2jItA3fwq9PHfCM1D 9 | ---- END SSH2 PUBLIC KEY ---- 10 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "2048-bit RSA", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa2.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | Comment: 2048-bit RSA 3 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 4 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 5 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 6 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 7 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 8 | 9lK/C2jItA3fwq9PHfCM1D 9 | ---- END SSH2 PUBLIC KEY ---- 10 | 11 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa2.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "2048-bit RSA", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa3.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | Comment: this is a special \ 3 | multi-line comment\ 4 | how cool is that not? 5 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 6 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 7 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 8 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 9 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 10 | 9lK/C2jItA3fwq9PHfCM1D 11 | ---- END SSH2 PUBLIC KEY ---- 12 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa3.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "this is a special multi-line comment how cool is that not?", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa4.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | Comment: "this is a special \ 3 | multi-line comment\ 4 | how cool is that not?" 5 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 6 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 7 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 8 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 9 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 10 | 9lK/C2jItA3fwq9PHfCM1D 11 | ---- END SSH2 PUBLIC KEY ---- 12 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa4.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "this is a special multi-line comment how cool is that not?", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa5.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 3 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 4 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 5 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 6 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 7 | 9lK/C2jItA3fwq9PHfCM1D 8 | ---- END SSH2 PUBLIC KEY ---- 9 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa5.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa6.pub: -------------------------------------------------------------------------------- 1 | ---- BEGIN SSH2 PUBLIC KEY ---- 2 | Subject: "nodejs" 3 | x-foo: something\ 4 | completely\ 5 | different 6 | Comment: "Foo bar baz" 7 | AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKC 8 | nbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCH 9 | S/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1m 10 | gJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW 11 | 61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc 12 | 9lK/C2jItA3fwq9PHfCM1D 13 | ---- END SSH2 PUBLIC KEY ---- 14 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/fixtures/rfc4716_rsa6.pub.result: -------------------------------------------------------------------------------- 1 | { 2 | "type": "ssh-rsa", 3 | "comment": "Foo bar baz", 4 | "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4q6eZdx7LYh46PcZNcS3\nCnO7GuYsEJZeTj5LQSgp21IyTelaBPprijnMwKa+pLQt5TEobpKFFNecPdT6oPoO\nKKMe6oH/pX0BNyAEB9KFZfZgh0v4J4IOiO0KHMBNkoTFeGrursPkqYRJ0HL4CqYq\nRdINy1sgDU6jUIOuDD5XZzlpDXb1ftZoCei9OHSWrMKbzibJc64JFM7tUoK6Vl64\nYiPgxsNXOJYMTrelVJYebtsNrJFmh3XXQABDVutWMYb8I6IrNs8zjxsf6c6N2tKX\nkk9G4EDKKip4g0bzDmD/fREPQ9vLi59N+ZsyjWCKKE3PZSvwtoyLQN38KvTx3wjN\nQwIDAQAB\n-----END PUBLIC KEY-----", 5 | "publicSSH": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDirp5l3HstiHjo9xk1xLcKc7sa5iwQll5OPktBKCnbUjJN6VoE+muKOczApr6ktC3lMShukoUU15w91Pqg+g4oox7qgf+lfQE3IAQH0oVl9mCHS/gngg6I7QocwE2ShMV4au6uw+SphEnQcvgKpipF0g3LWyANTqNQg64MPldnOWkNdvV+1mgJ6L04dJaswpvOJslzrgkUzu1SgrpWXrhiI+DGw1c4lgxOt6VUlh5u2w2skWaHdddAAENW61Yxhvwjois2zzOPGx/pzo3a0peST0bgQMoqKniDRvMOYP99EQ9D28uLn035mzKNYIooTc9lK/C2jItA3fwq9PHfCM1D", 6 | "private": null 7 | } 8 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test-durability-ssh.js: -------------------------------------------------------------------------------- 1 | var SSH2Stream = require('../lib/ssh'); 2 | 3 | var fs = require('fs'); 4 | var path = require('path'); 5 | var inspect = require('util').inspect; 6 | var inherits = require('util').inherits; 7 | var TransformStream = require('stream').Transform; 8 | var assert = require('assert'); 9 | 10 | var t = -1; 11 | var group = path.basename(__filename, '.js') + '/'; 12 | var fixturesdir = path.join(__dirname, 'fixtures'); 13 | 14 | var HOST_KEY_RSA = fs.readFileSync(path.join(fixturesdir, 'openssh_new_rsa')); 15 | var SERVER_CONFIG = { 16 | server: true, 17 | hostKeys: { 'ssh-rsa': HOST_KEY_RSA } 18 | }; 19 | 20 | function SimpleStream() { 21 | TransformStream.call(this); 22 | this.buffer = ''; 23 | } 24 | inherits(SimpleStream, TransformStream); 25 | SimpleStream.prototype._transform = function(chunk, encoding, cb) { 26 | this.buffer += chunk.toString('binary'); 27 | cb(); 28 | }; 29 | 30 | var tests = [ 31 | { run: function() { 32 | var what = this.what; 33 | var serverError = false; 34 | var server = new SSH2Stream(SERVER_CONFIG); 35 | var client = new SimpleStream(); 36 | 37 | client.pipe(server).pipe(client); 38 | 39 | server.on('error', function(err) { 40 | serverError = err; 41 | assert(err.message === 'Protocol version not supported', 42 | makeMsg(what, 'Wrong error message')); 43 | }).on('end', function() { 44 | assert(client.buffer === server.config.ident + '\r\n', 45 | makeMsg(what, 'Wrong server ident: ' + inspect(client.buffer))); 46 | assert(serverError, makeMsg(what, 'Expected server error')); 47 | next(); 48 | }); 49 | 50 | client.push('SSH-1.0-aaa\r\n'); 51 | }, 52 | what: 'Incompatible client SSH protocol version' 53 | }, 54 | { run: function() { 55 | var what = this.what; 56 | var serverError = false; 57 | var server = new SSH2Stream(SERVER_CONFIG); 58 | var client = new SimpleStream(); 59 | 60 | client.pipe(server).pipe(client); 61 | 62 | server.on('error', function(err) { 63 | serverError = err; 64 | assert(err.message === 'Bad identification start', 65 | makeMsg(what, 'Wrong error message')); 66 | }).on('end', function() { 67 | assert(client.buffer === server.config.ident + '\r\n', 68 | makeMsg(what, 'Wrong server ident: ' + inspect(client.buffer))); 69 | assert(serverError, makeMsg(what, 'Expected server error')); 70 | next(); 71 | }); 72 | client.push('LOL-2.0-asdf\r\n'); 73 | }, 74 | what: 'Malformed client protocol identification' 75 | }, 76 | { run: function() { 77 | var what = this.what; 78 | var serverError = false; 79 | var server = new SSH2Stream(SERVER_CONFIG); 80 | var client = new SimpleStream(); 81 | 82 | client.pipe(server).pipe(client); 83 | 84 | server.on('error', function(err) { 85 | serverError = err; 86 | assert(err.message === 'Max identification string size exceeded', 87 | makeMsg(what, 'Wrong error message')); 88 | }).on('end', function() { 89 | assert(client.buffer === server.config.ident + '\r\n', 90 | makeMsg(what, 'Wrong server ident: ' + inspect(client.buffer))); 91 | assert(serverError, makeMsg(what, 'Expected server error')); 92 | next(); 93 | }); 94 | var ident = 'SSH-2.0-'; 95 | for (var i = 0; i < 30; ++i) 96 | ident += 'foobarbaz'; 97 | ident += '\r\n'; 98 | client.push(ident); 99 | }, 100 | what: 'SSH client protocol identification too long (> 255 characters)' 101 | }, 102 | { run: function() { 103 | var what = this.what; 104 | var serverError = false; 105 | var server = new SSH2Stream(SERVER_CONFIG); 106 | var client = new SimpleStream(); 107 | 108 | client.pipe(server).pipe(client); 109 | 110 | server.on('error', function(err) { 111 | serverError = err; 112 | assert(err.message === 'Bad packet length', 113 | makeMsg(what, 'Wrong error message')); 114 | }).on('end', function() { 115 | assert(client.buffer.length, makeMsg(what, 'Expected server data')); 116 | assert(serverError, makeMsg(what, 'Expected server error')); 117 | next(); 118 | }); 119 | client.push('SSH-2.0-asdf\r\n'); 120 | // 500,000 byte packet_length 121 | client.push(Buffer.from([0x00, 0x07, 0xA1, 0x20, 0x00, 0x00, 0x00, 0x00])); 122 | }, 123 | what: 'Bad packet length (max)' 124 | }, 125 | { run: function() { 126 | var what = this.what; 127 | var serverError = false; 128 | var server = new SSH2Stream(SERVER_CONFIG); 129 | var client = new SimpleStream(); 130 | 131 | client.pipe(server).pipe(client); 132 | 133 | server.on('error', function(err) { 134 | serverError = err; 135 | assert(err.message === 'Bad packet length', 136 | makeMsg(what, 'Wrong error message')); 137 | }).on('end', function() { 138 | assert(client.buffer.length, makeMsg(what, 'Expected server data')); 139 | assert(serverError, makeMsg(what, 'Expected server error')); 140 | next(); 141 | }); 142 | client.push('SSH-2.0-asdf\r\n'); 143 | client.push(Buffer.from([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])); 144 | }, 145 | what: 'Bad packet length (min)' 146 | }, 147 | ]; 148 | 149 | function next() { 150 | if (Array.isArray(process._events.exit)) 151 | process._events.exit = process._events.exit[1]; 152 | if (++t === tests.length) 153 | return; 154 | 155 | var v = tests[t]; 156 | v.run.call(v); 157 | } 158 | 159 | function makeMsg(what, msg) { 160 | return '[' + group + what + ']: ' + msg; 161 | } 162 | 163 | process.once('exit', function() { 164 | assert(t === tests.length, 165 | makeMsg('_exit', 166 | 'Only finished ' + t + '/' + tests.length + ' tests')); 167 | }); 168 | 169 | next(); 170 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test-kexdh.js: -------------------------------------------------------------------------------- 1 | var SSH2Stream = require('../lib/ssh'); 2 | var parseKey = require('../lib/utils').parseKey; 3 | var MESSAGE = require('../lib/constants').MESSAGE; 4 | 5 | var assert = require('assert'); 6 | var fs = require('fs'); 7 | 8 | var SERVER_KEY = fs.readFileSync(__dirname + '/fixtures/openssh_new_rsa'); 9 | var SERVER_KEY_PRV = parseKey(SERVER_KEY); 10 | 11 | var server = new SSH2Stream({ 12 | server: true, 13 | hostKeys: { 14 | 'ssh-rsa': SERVER_KEY_PRV 15 | }, 16 | algorithms: { 17 | serverHostKey: ['ssh-rsa'] 18 | } 19 | }); 20 | var client = new SSH2Stream(); 21 | var cliError; 22 | var srvError; 23 | 24 | server.on('error', function(err) { 25 | assert(err); 26 | assert(/unexpected/.test(err.message)); 27 | assert(!srvError); 28 | srvError = err; 29 | }); 30 | 31 | // Removed 'KEXDH_REPLY' listeners as it causes client to send 'NEWKEYS' which 32 | // changes server's state. 33 | client.removeAllListeners('KEXDH_REPLY'); 34 | // Removed 'NEWKEYS' listeners as server sends 'NEWKEYS' after receiving 35 | // 'KEXDH_INIT' which causes errors on client if 'NEWKEYS' is processed 36 | // without processing 'KEXDH_REPLY' 37 | client.removeAllListeners('NEWKEYS'); 38 | // Added 'KEXDH_REPLY' which violates protocol and re-sends 'KEXDH_INIT' 39 | // packet 40 | client.on('KEXDH_REPLY', function(info) { 41 | var state = client._state; 42 | var outstate = state.outgoing; 43 | var buf = Buffer.allocUnsafe(1 + 4 + outstate.pubkey.length); 44 | buf[0] = MESSAGE.KEXDH_INIT; 45 | buf.writeUInt32BE(outstate.pubkey.length, 1, true); 46 | outstate.pubkey.copy(buf, 5); 47 | SSH2Stream._send(client, buf, undefined, true); 48 | }); 49 | client.on('error', function(err) { 50 | assert(!cliError); 51 | assert(err); 52 | assert.equal( 53 | err.message, 54 | 'PROTOCOL_ERROR', 55 | 'Expected Error: PROTOCOL_ERROR Got Error: ' + err.message 56 | ); 57 | cliError = err; 58 | }); 59 | client.pipe(server).pipe(client); 60 | 61 | process.on('exit', function() { 62 | assert(cliError, 'Expected client error'); 63 | }); 64 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test-keyparser.js: -------------------------------------------------------------------------------- 1 | var parseKey = require('../lib/keyParser').parseKey; 2 | 3 | var path = require('path'); 4 | var assert = require('assert'); 5 | var inspect = require('util').inspect; 6 | var fs = require('fs'); 7 | 8 | var EDDSA_SUPPORTED = require('../lib/constants.js').EDDSA_SUPPORTED; 9 | 10 | function failMsg(name, message, exit) { 11 | var msg = '[' + name + '] ' + message; 12 | if (!exit) 13 | return msg; 14 | console.error(msg); 15 | process.exit(1); 16 | } 17 | 18 | fs.readdirSync(__dirname + '/fixtures').forEach(function(name) { 19 | if (/\.result$/i.test(name)) 20 | return; 21 | if (/ed25519/i.test(name) && !EDDSA_SUPPORTED) 22 | return; 23 | 24 | var isPublic = /\.pub$/i.test(name); 25 | var isEncrypted = /_enc/i.test(name); 26 | var isPPK = /^ppk_/i.test(name); 27 | var key = fs.readFileSync(__dirname + '/fixtures/' + name); 28 | var res; 29 | if (isEncrypted) 30 | res = parseKey(key, (isPPK ? 'node.js' : 'password')); 31 | else 32 | res = parseKey(key); 33 | var expected = JSON.parse( 34 | fs.readFileSync(__dirname + '/fixtures/' + name + '.result', 'utf8') 35 | ); 36 | if (typeof expected === 'string') { 37 | if (!(res instanceof Error)) 38 | failMsg(name, 'Expected error: ' + expected, true); 39 | assert.strictEqual(expected, 40 | res.message, 41 | failMsg(name, 42 | 'Error message mismatch.\n' 43 | + 'Expected: ' + inspect(expected) + '\n' 44 | + 'Received: ' + inspect(res.message))); 45 | } else if (res instanceof Error) { 46 | failMsg(name, 'Unexpected error: ' + res.stack, true); 47 | } else { 48 | if (Array.isArray(expected) && !Array.isArray(res)) 49 | failMsg(name, 'Expected array but did not receive one', true); 50 | if (!Array.isArray(expected) && Array.isArray(res)) 51 | failMsg(name, 'Received array but did not expect one', true); 52 | 53 | if (!Array.isArray(res)) { 54 | res = [res]; 55 | expected = [expected]; 56 | } else if (res.length !== expected.length) { 57 | failMsg(name, 58 | 'Expected ' + expected.length + ' keys, but received ' 59 | + res.length, 60 | true); 61 | } 62 | 63 | res.forEach((curKey, i) => { 64 | var details = { 65 | type: curKey.type, 66 | comment: curKey.comment, 67 | public: curKey.getPublicPEM(), 68 | publicSSH: curKey.getPublicSSH() 69 | && curKey.getPublicSSH().toString('base64'), 70 | private: curKey.getPrivatePEM() 71 | }; 72 | assert.deepEqual(details, 73 | expected[i], 74 | failMsg(name, 75 | 'Parser output mismatch.\n' 76 | + 'Expected: ' + inspect(expected[i]) 77 | + '\n\nReceived: ' + inspect(details))); 78 | }); 79 | } 80 | 81 | if (isEncrypted && !isPublic) { 82 | // Make sure parsing encrypted keys without a passhprase or incorrect 83 | // passphrase results in an appropriate error 84 | var err = parseKey(key); 85 | if (!(err instanceof Error)) 86 | failMsg(name, 'Expected error during parse without passphrase', true); 87 | if (!/no passphrase/i.test(err.message)) { 88 | failMsg(name, 89 | 'Unexpected error during parse without passphrase: ' 90 | + err.message, 91 | true); 92 | } 93 | } 94 | 95 | if (!isPublic) { 96 | // Try signing and verifying to make sure the private/public key PEMs are 97 | // correct 98 | var data = Buffer.from('hello world'); 99 | res.forEach((curKey) => { 100 | var sig = curKey.sign(data); 101 | if (sig instanceof Error) { 102 | failMsg(name, 103 | 'Error while signing data with key: ' + sig.message, 104 | true); 105 | } 106 | var verified = curKey.verify(data, sig); 107 | if (verified instanceof Error) { 108 | failMsg(name, 109 | 'Error while verifying signed data with key: ' 110 | + verified.message, 111 | true); 112 | } 113 | if (!verified) 114 | failMsg(name, 'Failed to verify signed data with key', true); 115 | }); 116 | if (res.length === 1 && !isPPK) { 117 | var pubFile = fs.readFileSync(__dirname + '/fixtures/' + name + '.pub'); 118 | var pubParsed = parseKey(pubFile); 119 | if (!(pubParsed instanceof Error)) { 120 | var sig = res[0].sign(data); 121 | if (sig instanceof Error) { 122 | failMsg(name, 123 | 'Error while signing data with key: ' + sig.message, 124 | true); 125 | } 126 | var verified = pubParsed.verify(data, sig); 127 | if (verified instanceof Error) { 128 | failMsg(name, 129 | 'Error while verifying signed data with separate public key: ' 130 | + verified.message, 131 | true); 132 | } 133 | if (!verified) { 134 | failMsg(name, 135 | 'Failed to verify signed data with separate public key', 136 | true); 137 | } 138 | } 139 | } 140 | } 141 | }); 142 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test-ssh.js: -------------------------------------------------------------------------------- 1 | var SSH2Stream = require('../lib/ssh'); 2 | var utils = require('../lib/utils'); 3 | var parseKey = utils.parseKey; 4 | 5 | var basename = require('path').basename; 6 | var assert_ = require('assert'); 7 | var inherits = require('util').inherits; 8 | var inspect = require('util').inspect; 9 | var TransformStream = require('stream').Transform; 10 | var fs = require('fs'); 11 | 12 | var group = basename(__filename, '.js') + '/'; 13 | var t = -1; 14 | var SERVER_KEY = fs.readFileSync(__dirname + '/fixtures/openssh_new_rsa'); 15 | var HOST_KEYS = { 'ssh-rsa': parseKey(SERVER_KEY) }; 16 | var HOST_ALGORITHMS = { serverHostKey: ['ssh-rsa'] }; 17 | 18 | function SimpleStream() { 19 | TransformStream.call(this); 20 | this.buffer = ''; 21 | } 22 | inherits(SimpleStream, TransformStream); 23 | SimpleStream.prototype._transform = function(chunk, encoding, cb) { 24 | this.buffer += chunk.toString('binary'); 25 | cb(null, chunk); 26 | }; 27 | 28 | var tests = [ 29 | // client-side tests 30 | { run: function() { 31 | var algos = ['ssh-dss', 'ssh-rsa', 'ecdsa-sha2-nistp521']; 32 | var client = new SSH2Stream({ 33 | algorithms: { 34 | serverHostKey: algos 35 | } 36 | }); 37 | var clientBufStream = new SimpleStream(); 38 | var clientReady = false; 39 | var server = new SSH2Stream({ 40 | server: true, 41 | hostKeys: HOST_KEYS, 42 | algorithms: HOST_ALGORITHMS 43 | }); 44 | var serverBufStream = new SimpleStream(); 45 | var serverReady = false; 46 | 47 | function onNEWKEYS() { 48 | if (this === client) { 49 | assert(!clientReady, 'Already received client NEWKEYS event'); 50 | clientReady = true; 51 | } else { 52 | assert(!serverReady, 'Already received server NEWKEYS event'); 53 | serverReady = true; 54 | } 55 | if (clientReady && serverReady) { 56 | var traffic = clientBufStream.buffer; 57 | var algoList = algos.join(','); 58 | var re = new RegExp('\x00\x00\x00' 59 | + hexByte(algoList.length) 60 | + algoList); 61 | assert(re.test(traffic), 'Unexpected client algorithms'); 62 | 63 | traffic = serverBufStream.buffer; 64 | assert(/\x00\x00\x00\x07ssh-rsa/.test(traffic), 65 | 'Unexpected server algorithms'); 66 | 67 | next(); 68 | } 69 | } 70 | 71 | client.on('NEWKEYS', onNEWKEYS); 72 | server.on('NEWKEYS', onNEWKEYS); 73 | 74 | client.pipe(clientBufStream) 75 | .pipe(server) 76 | .pipe(serverBufStream) 77 | .pipe(client); 78 | }, 79 | what: 'Custom algorithms' 80 | }, 81 | { run: function() { 82 | var serverIdent = 'testing \t'; 83 | var expectedFullIdent = 'SSH-2.0-' + serverIdent; 84 | 85 | var client = new SSH2Stream({}); 86 | client.on('header', function(header) { 87 | assert(header.identRaw === expectedFullIdent, 88 | '\nSaw: ' + inspect(header.identRaw) + '\n' 89 | + 'Expected: ' + inspect(expectedFullIdent)); 90 | next(); 91 | }); 92 | 93 | var server = new SSH2Stream({ 94 | server: true, 95 | hostKeys: HOST_KEYS, 96 | algorithms: HOST_ALGORITHMS, 97 | ident: serverIdent 98 | }); 99 | 100 | client.pipe(server).pipe(client); 101 | }, 102 | what: 'Remote ident is not trimmed' 103 | }, 104 | { run: function() { 105 | var client = new SSH2Stream({ 106 | algorithms: { 107 | compress: ['zlib@openssh.com'] 108 | } 109 | }); 110 | var clientReady = false; 111 | var server = new SSH2Stream({ 112 | server: true, 113 | hostKeys: HOST_KEYS, 114 | algorithms: { 115 | serverHostKey: ['ssh-rsa'], 116 | compress: ['zlib@openssh.com'] 117 | } 118 | }); 119 | var serverReady = false; 120 | 121 | function onNEWKEYS() { 122 | if (this === client) { 123 | assert(!clientReady, 'Already received client NEWKEYS event'); 124 | clientReady = true; 125 | } else { 126 | assert(!serverReady, 'Already received server NEWKEYS event'); 127 | serverReady = true; 128 | } 129 | if (clientReady && serverReady) 130 | client.authNone('asdf'); 131 | } 132 | 133 | client.on('NEWKEYS', onNEWKEYS).once('USERAUTH_SUCCESS', function() { 134 | client.ping(); 135 | }); 136 | server.on('NEWKEYS', onNEWKEYS).once('USERAUTH_REQUEST', function() { 137 | server.authSuccess(); 138 | }).once('GLOBAL_REQUEST', function(reqName) { 139 | assert_.strictEqual(reqName, 'keepalive@openssh.com'); 140 | next(); 141 | }); 142 | 143 | client.pipe(server).pipe(client); 144 | }, 145 | what: 'Ensure post-user auth compression starts correctly on server' 146 | }, 147 | ]; 148 | 149 | 150 | function hexByte(n) { 151 | return String.fromCharCode(n); 152 | } 153 | 154 | function assert(expression, msg) { 155 | msg || (msg = 'failed assertion'); 156 | assert_(expression, makeMsg(tests[t].what, msg)); 157 | } 158 | 159 | 160 | 161 | function next() { 162 | if (Array.isArray(process._events.exit)) 163 | process._events.exit = process._events.exit[1]; 164 | if (++t === tests.length) 165 | return; 166 | 167 | var v = tests[t]; 168 | v.run.call(v); 169 | } 170 | 171 | function makeMsg(what, msg) { 172 | return '[' + group + what + ']: ' + msg; 173 | } 174 | 175 | process.once('exit', function() { 176 | assert_(t === tests.length, 177 | makeMsg('_exit', 178 | 'Only finished ' + t + '/' + tests.length + ' tests')); 179 | }); 180 | 181 | next(); 182 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test-utils.js: -------------------------------------------------------------------------------- 1 | var utils = require('../lib/utils'); 2 | 3 | var path = require('path'); 4 | var assert = require('assert'); 5 | 6 | var t = -1; 7 | var group = path.basename(__filename, '.js') + '/'; 8 | 9 | var tests = [ 10 | { run: function() { 11 | var what = this.what; 12 | var r; 13 | 14 | assert.strictEqual(r = utils.readInt(Buffer.from([0,0,0]), 0), 15 | false, 16 | makeMsg(what, 'Wrong result: ' + r)); 17 | next(); 18 | }, 19 | what: 'readInt - without stream callback - failure #1' 20 | }, 21 | { run: function() { 22 | var what = this.what; 23 | var r; 24 | 25 | assert.strictEqual(r = utils.readInt(Buffer.from([]), 0), 26 | false, 27 | makeMsg(what, 'Wrong result: ' + r)); 28 | next(); 29 | }, 30 | what: 'readInt - without stream callback - failure #2' 31 | }, 32 | { run: function() { 33 | var what = this.what; 34 | var r; 35 | 36 | assert.strictEqual(r = utils.readInt(Buffer.from([0,0,0,5]), 0), 37 | 5, 38 | makeMsg(what, 'Wrong result: ' + r)); 39 | next(); 40 | }, 41 | what: 'readInt - without stream callback - success' 42 | }, 43 | { run: function() { 44 | var what = this.what; 45 | var callback = function() {}; 46 | var stream = { 47 | _cleanup: function(cb) { 48 | cleanupCalled = true; 49 | assert(cb === callback, makeMsg(what, 'Wrong callback')); 50 | } 51 | }; 52 | var cleanupCalled = false; 53 | var r = utils.readInt(Buffer.from([]), 0, stream, callback); 54 | 55 | assert.strictEqual(r, 56 | false, 57 | makeMsg(what, 'Wrong result: ' + r)); 58 | assert(cleanupCalled, makeMsg(what, 'Cleanup not called')); 59 | next(); 60 | }, 61 | what: 'readInt - with stream callback' 62 | }, 63 | { run: function() { 64 | var what = this.what; 65 | var r; 66 | 67 | assert.strictEqual(r = utils.readString(Buffer.from([0,0,0]), 0), 68 | false, 69 | makeMsg(what, 'Wrong result: ' + r)); 70 | next(); 71 | }, 72 | what: 'readString - without stream callback - bad length #1' 73 | }, 74 | { run: function() { 75 | var what = this.what; 76 | var r; 77 | 78 | assert.strictEqual(r = utils.readString(Buffer.from([]), 0), 79 | false, 80 | makeMsg(what, 'Wrong result: ' + r)); 81 | next(); 82 | }, 83 | what: 'readString - without stream callback - bad length #2' 84 | }, 85 | { run: function() { 86 | var what = this.what; 87 | var r; 88 | 89 | assert.deepEqual(r = utils.readString(Buffer.from([0,0,0,1,5]), 0), 90 | Buffer.from([5]), 91 | makeMsg(what, 'Wrong result: ' + r)); 92 | next(); 93 | }, 94 | what: 'readString - without stream callback - success' 95 | }, 96 | { run: function() { 97 | var what = this.what; 98 | var r = utils.readString(Buffer.from([0,0,0,1,33]), 0, 'ascii'); 99 | 100 | assert.deepEqual(r, 101 | '!', 102 | makeMsg(what, 'Wrong result: ' + r)); 103 | next(); 104 | }, 105 | what: 'readString - without stream callback - encoding' 106 | }, 107 | { run: function() { 108 | var what = this.what; 109 | var callback = function() {}; 110 | var stream = { 111 | _cleanup: function(cb) { 112 | cleanupCalled = true; 113 | assert(cb === callback, makeMsg(what, 'Wrong callback')); 114 | } 115 | }; 116 | var cleanupCalled = false; 117 | var r; 118 | 119 | assert.deepEqual(r = utils.readString(Buffer.from([0,0,0,1]), 120 | 0, 121 | stream, 122 | callback), 123 | false, 124 | makeMsg(what, 'Wrong result: ' + r)); 125 | assert(cleanupCalled, makeMsg(what, 'Cleanup not called')); 126 | next(); 127 | }, 128 | what: 'readString - with stream callback - no encoding' 129 | }, 130 | { run: function() { 131 | var what = this.what; 132 | var callback = function() {}; 133 | var stream = { 134 | _cleanup: function(cb) { 135 | cleanupCalled = true; 136 | assert(cb === callback, makeMsg(what, 'Wrong callback')); 137 | } 138 | }; 139 | var cleanupCalled = false; 140 | var r; 141 | 142 | assert.deepEqual(r = utils.readString(Buffer.from([0,0,0,1]), 143 | 0, 144 | 'ascii', 145 | stream, 146 | callback), 147 | false, 148 | makeMsg(what, 'Wrong result: ' + r)); 149 | assert(cleanupCalled, makeMsg(what, 'Cleanup not called')); 150 | next(); 151 | }, 152 | what: 'readString - with stream callback - encoding' 153 | }, 154 | ]; 155 | 156 | function next() { 157 | if (Array.isArray(process._events.exit)) 158 | process._events.exit = process._events.exit[1]; 159 | if (++t === tests.length) 160 | return; 161 | 162 | var v = tests[t]; 163 | process.nextTick(function() { 164 | v.run.call(v); 165 | }); 166 | } 167 | 168 | function makeMsg(what, msg) { 169 | return '[' + group + what + ']: ' + msg; 170 | } 171 | 172 | process.once('exit', function() { 173 | assert(t === tests.length, 174 | makeMsg('_exit', 175 | 'Only finished ' + t + '/' + tests.length + ' tests')); 176 | }); 177 | 178 | next(); 179 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/ssh2-streams/test/test.js: -------------------------------------------------------------------------------- 1 | var spawn = require('child_process').spawn, 2 | join = require('path').join; 3 | 4 | var files = require('fs').readdirSync(__dirname).filter(function(f) { 5 | return (f.substr(0, 5) === 'test-'); 6 | }).map(function(f) { 7 | return join(__dirname, f); 8 | }), 9 | f = -1; 10 | 11 | function next() { 12 | if (++f < files.length) { 13 | spawn(process.argv[0], [ files[f] ], { stdio: 'inherit' }) 14 | .on('exit', function(code) { 15 | if (code === 0) 16 | process.nextTick(next); 17 | else 18 | process.exit(code); 19 | }); 20 | } 21 | } 22 | next(); 23 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/streamsearch/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Brian White. All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/streamsearch/README.md: -------------------------------------------------------------------------------- 1 | Description 2 | =========== 3 | 4 | streamsearch is a module for [node.js](http://nodejs.org/) that allows searching a stream using the Boyer-Moore-Horspool algorithm. 5 | 6 | This module is based heavily on the Streaming Boyer-Moore-Horspool C++ implementation by Hongli Lai [here](https://github.com/FooBarWidget/boyer-moore-horspool). 7 | 8 | 9 | Requirements 10 | ============ 11 | 12 | * [node.js](http://nodejs.org/) -- v0.8.0 or newer 13 | 14 | 15 | Installation 16 | ============ 17 | 18 | npm install streamsearch 19 | 20 | Example 21 | ======= 22 | 23 | ```javascript 24 | var StreamSearch = require('streamsearch'), 25 | inspect = require('util').inspect; 26 | 27 | var needle = new Buffer([13, 10]), // CRLF 28 | s = new StreamSearch(needle), 29 | chunks = [ 30 | new Buffer('foo'), 31 | new Buffer(' bar'), 32 | new Buffer('\r'), 33 | new Buffer('\n'), 34 | new Buffer('baz, hello\r'), 35 | new Buffer('\n world.'), 36 | new Buffer('\r\n Node.JS rules!!\r\n\r\n') 37 | ]; 38 | s.on('info', function(isMatch, data, start, end) { 39 | if (data) 40 | console.log('data: ' + inspect(data.toString('ascii', start, end))); 41 | if (isMatch) 42 | console.log('match!'); 43 | }); 44 | for (var i = 0, len = chunks.length; i < len; ++i) 45 | s.push(chunks[i]); 46 | 47 | // output: 48 | // 49 | // data: 'foo' 50 | // data: ' bar' 51 | // match! 52 | // data: 'baz, hello' 53 | // match! 54 | // data: ' world.' 55 | // match! 56 | // data: ' Node.JS rules!!' 57 | // match! 58 | // data: '' 59 | // match! 60 | ``` 61 | 62 | 63 | API 64 | === 65 | 66 | Events 67 | ------ 68 | 69 | * **info**(< _boolean_ >isMatch[, < _Buffer_ >chunk, < _integer_ >start, < _integer_ >end]) - A match _may_ or _may not_ have been made. In either case, a preceding `chunk` of data _may_ be available that did not match the needle. Data (if available) is in `chunk` between `start` (inclusive) and `end` (exclusive). 70 | 71 | 72 | Properties 73 | ---------- 74 | 75 | * **maxMatches** - < _integer_ > - The maximum number of matches. Defaults to Infinity. 76 | 77 | * **matches** - < _integer_ > - The current match count. 78 | 79 | 80 | Functions 81 | --------- 82 | 83 | * **(constructor)**(< _mixed_ >needle) - Creates and returns a new instance for searching for a _Buffer_ or _string_ `needle`. 84 | 85 | * **push**(< _Buffer_ >chunk) - _integer_ - Processes `chunk`. The return value is the last processed index in `chunk` + 1. 86 | 87 | * **reset**() - _(void)_ - Resets internal state. Useful for when you wish to start searching a new/different stream for example. 88 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/streamsearch/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "streamsearch@~0.1.2", 3 | "_id": "streamsearch@0.1.2", 4 | "_inBundle": false, 5 | "_integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", 6 | "_location": "/streamsearch", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "streamsearch@~0.1.2", 12 | "name": "streamsearch", 13 | "escapedName": "streamsearch", 14 | "rawSpec": "~0.1.2", 15 | "saveSpec": null, 16 | "fetchSpec": "~0.1.2" 17 | }, 18 | "_requiredBy": [ 19 | "/ssh2-streams" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 22 | "_shasum": "808b9d0e56fc273d809ba57338e929919a1a9f1a", 23 | "_spec": "streamsearch@~0.1.2", 24 | "_where": "/workspace/ssh-agent-backend/node_modules/ssh2-streams", 25 | "author": { 26 | "name": "Brian White", 27 | "email": "mscdex@mscdex.net" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/mscdex/streamsearch/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "deprecated": false, 34 | "description": "Streaming Boyer-Moore-Horspool searching for node.js", 35 | "engines": { 36 | "node": ">=0.8.0" 37 | }, 38 | "homepage": "https://github.com/mscdex/streamsearch#readme", 39 | "keywords": [ 40 | "stream", 41 | "horspool", 42 | "boyer-moore-horspool", 43 | "boyer-moore", 44 | "search" 45 | ], 46 | "licenses": [ 47 | { 48 | "type": "MIT", 49 | "url": "http://github.com/mscdex/streamsearch/raw/master/LICENSE" 50 | } 51 | ], 52 | "main": "./lib/sbmh", 53 | "name": "streamsearch", 54 | "repository": { 55 | "type": "git", 56 | "url": "git+ssh://git@github.com/mscdex/streamsearch.git" 57 | }, 58 | "version": "0.1.2" 59 | } 60 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/.npmignore: -------------------------------------------------------------------------------- 1 | .eslintrc 2 | .travis.yml 3 | bower.json 4 | test 5 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/AUTHORS.md: -------------------------------------------------------------------------------- 1 | List of TweetNaCl.js authors 2 | ============================ 3 | 4 | Alphabetical order by first name. 5 | Format: Name (GitHub username or URL) 6 | 7 | * AndSDev (@AndSDev) 8 | * Devi Mandiri (@devi) 9 | * Dmitry Chestnykh (@dchest) 10 | 11 | List of authors of third-party public domain code from which TweetNaCl.js code was derived 12 | ========================================================================================== 13 | 14 | [TweetNaCl](http://tweetnacl.cr.yp.to/) 15 | -------------------------------------- 16 | 17 | * Bernard van Gastel 18 | * Daniel J. Bernstein 19 | * Peter Schwabe 20 | * Sjaak Smetsers 21 | * Tanja Lange 22 | * Wesley Janssen 23 | 24 | 25 | [Poly1305-donna](https://github.com/floodyberry/poly1305-donna) 26 | -------------------------------------------------------------- 27 | 28 | * Andrew Moon (@floodyberry) 29 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Important! 2 | 3 | If your contribution is not trivial (not a typo fix, etc.), we can only accept 4 | it if you dedicate your copyright for the contribution to the public domain. 5 | Make sure you understand what it means (see http://unlicense.org/)! If you 6 | agree, please add yourself to AUTHORS.md file, and include the following text 7 | to your pull request description or a comment in it: 8 | 9 | ------------------------------------------------------------------------------ 10 | 11 | I dedicate any and all copyright interest in this software to the 12 | public domain. I make this dedication for the benefit of the public at 13 | large and to the detriment of my heirs and successors. I intend this 14 | dedication to be an overt act of relinquishment in perpetuity of all 15 | present and future rights to this software under copyright law. 16 | 17 | Anyone is free to copy, modify, publish, use, compile, sell, or 18 | distribute this software, either in source code form or as a compiled 19 | binary, for any purpose, commercial or non-commercial, and by any 20 | means. 21 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/nacl.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for TweetNaCl.js 2 | 3 | export as namespace nacl; 4 | 5 | declare var nacl: nacl; 6 | export = nacl; 7 | 8 | declare namespace nacl { 9 | export interface BoxKeyPair { 10 | publicKey: Uint8Array; 11 | secretKey: Uint8Array; 12 | } 13 | 14 | export interface SignKeyPair { 15 | publicKey: Uint8Array; 16 | secretKey: Uint8Array; 17 | } 18 | 19 | export interface secretbox { 20 | (msg: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array; 21 | open(box: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array | false; 22 | readonly keyLength: number; 23 | readonly nonceLength: number; 24 | readonly overheadLength: number; 25 | } 26 | 27 | export interface scalarMult { 28 | (n: Uint8Array, p: Uint8Array): Uint8Array; 29 | base(n: Uint8Array): Uint8Array; 30 | readonly scalarLength: number; 31 | readonly groupElementLength: number; 32 | } 33 | 34 | namespace box { 35 | export interface open { 36 | (msg: Uint8Array, nonce: Uint8Array, publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array | false; 37 | after(box: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array | false; 38 | } 39 | 40 | export interface keyPair { 41 | (): BoxKeyPair; 42 | fromSecretKey(secretKey: Uint8Array): BoxKeyPair; 43 | } 44 | } 45 | 46 | export interface box { 47 | (msg: Uint8Array, nonce: Uint8Array, publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array; 48 | before(publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array; 49 | after(msg: Uint8Array, nonce: Uint8Array, key: Uint8Array): Uint8Array; 50 | open: box.open; 51 | keyPair: box.keyPair; 52 | readonly publicKeyLength: number; 53 | readonly secretKeyLength: number; 54 | readonly sharedKeyLength: number; 55 | readonly nonceLength: number; 56 | readonly overheadLength: number; 57 | } 58 | 59 | namespace sign { 60 | export interface detached { 61 | (msg: Uint8Array, secretKey: Uint8Array): Uint8Array; 62 | verify(msg: Uint8Array, sig: Uint8Array, publicKey: Uint8Array): boolean; 63 | } 64 | 65 | export interface keyPair { 66 | (): SignKeyPair; 67 | fromSecretKey(secretKey: Uint8Array): SignKeyPair; 68 | fromSeed(secretKey: Uint8Array): SignKeyPair; 69 | } 70 | } 71 | 72 | export interface sign { 73 | (msg: Uint8Array, secretKey: Uint8Array): Uint8Array; 74 | open(signedMsg: Uint8Array, publicKey: Uint8Array): Uint8Array | null; 75 | detached: sign.detached; 76 | keyPair: sign.keyPair; 77 | readonly publicKeyLength: number; 78 | readonly secretKeyLength: number; 79 | readonly seedLength: number; 80 | readonly signatureLength: number; 81 | } 82 | 83 | export interface hash { 84 | (msg: Uint8Array): Uint8Array; 85 | readonly hashLength: number; 86 | } 87 | } 88 | 89 | declare interface nacl { 90 | randomBytes(n: number): Uint8Array; 91 | secretbox: nacl.secretbox; 92 | scalarMult: nacl.scalarMult; 93 | box: nacl.box; 94 | sign: nacl.sign; 95 | hash: nacl.hash; 96 | verify(x: Uint8Array, y: Uint8Array): boolean; 97 | setPRNG(fn: (x: Uint8Array, n: number) => void): void; 98 | } 99 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/node_modules/tweetnacl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "tweetnacl@^0.14.3", 3 | "_id": "tweetnacl@0.14.5", 4 | "_inBundle": false, 5 | "_integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 6 | "_location": "/tweetnacl", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "tweetnacl@^0.14.3", 12 | "name": "tweetnacl", 13 | "escapedName": "tweetnacl", 14 | "rawSpec": "^0.14.3", 15 | "saveSpec": null, 16 | "fetchSpec": "^0.14.3" 17 | }, 18 | "_requiredBy": [ 19 | "/bcrypt-pbkdf" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 22 | "_shasum": "5ae68177f192d4456269d108afa93ff8743f4f64", 23 | "_spec": "tweetnacl@^0.14.3", 24 | "_where": "/workspace/ssh-agent-backend/node_modules/bcrypt-pbkdf", 25 | "author": { 26 | "name": "TweetNaCl-js contributors" 27 | }, 28 | "browser": { 29 | "buffer": false, 30 | "crypto": false 31 | }, 32 | "bugs": { 33 | "url": "https://github.com/dchest/tweetnacl-js/issues" 34 | }, 35 | "bundleDependencies": false, 36 | "deprecated": false, 37 | "description": "Port of TweetNaCl cryptographic library to JavaScript", 38 | "devDependencies": { 39 | "browserify": "^13.0.0", 40 | "eslint": "^2.2.0", 41 | "faucet": "^0.0.1", 42 | "tap-browser-color": "^0.1.2", 43 | "tape": "^4.4.0", 44 | "tape-run": "^2.1.3", 45 | "tweetnacl-util": "^0.13.3", 46 | "uglify-js": "^2.6.1" 47 | }, 48 | "directories": { 49 | "test": "test" 50 | }, 51 | "homepage": "https://tweetnacl.js.org", 52 | "keywords": [ 53 | "crypto", 54 | "cryptography", 55 | "curve25519", 56 | "ed25519", 57 | "encrypt", 58 | "hash", 59 | "key", 60 | "nacl", 61 | "poly1305", 62 | "public", 63 | "salsa20", 64 | "signatures" 65 | ], 66 | "license": "Unlicense", 67 | "main": "nacl-fast.js", 68 | "name": "tweetnacl", 69 | "repository": { 70 | "type": "git", 71 | "url": "git+https://github.com/dchest/tweetnacl-js.git" 72 | }, 73 | "scripts": { 74 | "bench": "node test/benchmark/bench.js", 75 | "build": "uglifyjs nacl.js -c -m -o nacl.min.js && uglifyjs nacl-fast.js -c -m -o nacl-fast.min.js", 76 | "build-test-browser": "browserify test/browser/init.js test/*.js | uglifyjs -c -m -o test/browser/_bundle.js 2>/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", 77 | "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js", 78 | "test": "npm run test-node-all && npm run test-browser", 79 | "test-browser": "NACL_SRC=${NACL_SRC:='nacl.min.js'} && npm run build-test-browser && cat $NACL_SRC test/browser/_bundle.js | tape-run | faucet", 80 | "test-node": "tape test/*.js | faucet", 81 | "test-node-all": "make -C test/c && tape test/*.js test/c/*.js | faucet" 82 | }, 83 | "types": "nacl.d.ts", 84 | "version": "0.14.5" 85 | } 86 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ssh-agent-backend", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "asn1": { 8 | "version": "0.2.4", 9 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 10 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 11 | "requires": { 12 | "safer-buffer": "~2.1.0" 13 | } 14 | }, 15 | "bcrypt-pbkdf": { 16 | "version": "1.0.2", 17 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 18 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 19 | "requires": { 20 | "tweetnacl": "^0.14.3" 21 | } 22 | }, 23 | "safer-buffer": { 24 | "version": "2.1.2", 25 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 26 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 27 | }, 28 | "ssh2-streams": { 29 | "version": "0.4.9", 30 | "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.9.tgz", 31 | "integrity": "sha512-glMQKeYKuA+rLaH16fJC3nZMV1BWklbxuYCR4C5/LlBSf2yaoNRpPU7Ul702xsi5nvYjIx9XDkKBJwrBjkDynw==", 32 | "requires": { 33 | "asn1": "~0.2.0", 34 | "bcrypt-pbkdf": "^1.0.2", 35 | "streamsearch": "~0.1.2" 36 | } 37 | }, 38 | "streamsearch": { 39 | "version": "0.1.2", 40 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 41 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 42 | }, 43 | "tweetnacl": { 44 | "version": "0.14.5", 45 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 46 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /service/ssh-agent-backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ssh-agent-backend", 3 | "version": "0.1.0", 4 | "description": "iam-ssh-agent backend lambda functions", 5 | "repository": "https://github.com/buildkite/iam-ssh-agent", 6 | "author": "Keith Duncan", 7 | "license": "MIT", 8 | "dependencies": { 9 | "ssh2-streams": "0.4.9" 10 | }, 11 | "devDependencies": {} 12 | } 13 | -------------------------------------------------------------------------------- /service/template.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: '2010-09-09' 2 | Transform: AWS::Serverless-2016-10-31 3 | Description: > 4 | iam-ssh-agent backend 5 | 6 | API Gateway, Lambda functions and DynamoDB table to store permissions. 7 | 8 | Parameters: 9 | EndpointConfiguration: 10 | Type: String 11 | AllowedValues: 12 | - REGIONAL 13 | - PRIVATE 14 | Default: REGIONAL 15 | Description: REGIONAL can be accessed from anywhere including the public Internet (authenticated with IAM credentials), PRIVATE is restricted to specific VPCs using AWS PrivateLink (additional costs apply). 16 | AccountIds: 17 | Type: CommaDelimitedList 18 | Description: Comma separated list of AWS AccountIds whose IAM entities should be allowed to access the API Gateway. 19 | SourceVpcIds: 20 | Type: CommaDelimitedList 21 | Description: Optional - Comma separated list of AWS VPC IDs whose occupants should be allowed to access the API Gateway, only applicable when EndpointConfiguration is PRIVATE. 22 | Default: '' 23 | 24 | Conditions: 25 | AccountRestriction: !Not [ !Equals [ !Join [ ',', !Ref AccountIds ] , '' ] ] 26 | VpcRestriction: !Not [ !Equals [ !Join [ ',', !Ref SourceVpcIds ] , '' ] ] 27 | 28 | Metadata: 29 | AWS::CloudFormation::Interface: 30 | ParameterGroups: 31 | - Label: 32 | default: Endpoint Configuration 33 | Parameters: 34 | - EndpointConfiguration 35 | - Label: 36 | default: Access Control 37 | Parameters: 38 | - AccountIds 39 | - SourceVpcIds 40 | ParameterLabels: 41 | EndpointConfiguration: 42 | default: What kind of API Gateway do you want to create? 43 | 44 | AWS::ServerlessRepo::Application: 45 | Name: iam-ssh-agent 46 | Description: An ssh-agent replacement that uses a caller's IAM identity to control access a list of permitted ssh identities. Designed for less trusted continuous integration environments where you want to use an ssh key without granting access to the raw key material. 47 | Author: Keith Duncan 48 | SpdxLicenseId: BSD-3-Clause 49 | LicenseUrl: ../LICENSE 50 | ReadmeUrl: README_SAR.md 51 | Labels: ['ssh', 'ssh-agent', 'ssh-keys', 'authentication'] 52 | HomePageUrl: https://github.com/buildkite/iam-ssh-agent 53 | SourceCodeUrl: https://github.com/buildkite/iam-ssh-agent 54 | 55 | # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst 56 | Globals: 57 | Function: 58 | Timeout: 10 59 | Runtime: nodejs12.x 60 | Environment: 61 | Variables: 62 | KEY_PERMISSIONS_TABLE_NAME: !Ref ResourcePermissionTable 63 | Api: 64 | Auth: 65 | DefaultAuthorizer: AWS_IAM 66 | InvokeRole: NONE 67 | ResourcePolicy: 68 | AwsAccountWhitelist: !If [ AccountRestriction, !Ref AccountIds, !Ref AWS::NoValue ] 69 | SourceVpcWhitelist: !If [ VpcRestriction, !Ref SourceVpcIds, !Ref AWS::NoValue ] 70 | EndpointConfiguration: !Ref EndpointConfiguration 71 | 72 | Resources: 73 | ListIdentitiesFunction: 74 | Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction 75 | Properties: 76 | CodeUri: ssh-agent-backend/ 77 | Handler: ListIdentities.handler 78 | Policies: 79 | - DynamoDBReadPolicy: 80 | TableName: !Ref ResourcePermissionTable 81 | - SSMParameterReadPolicy: 82 | ParameterName: "*/key.pub" 83 | Events: 84 | SSHAgentBackend: 85 | Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api 86 | Properties: 87 | Path: /identities 88 | Method: get 89 | ListIdentitiesLogGroup: 90 | Type: AWS::Logs::LogGroup 91 | DependsOn: ListIdentitiesFunction 92 | Properties: 93 | RetentionInDays: 1 94 | LogGroupName: 95 | !Sub 96 | - '/aws/lambda/${LambdaName}' 97 | - LambdaName: !Ref ListIdentitiesFunction 98 | GetSignatureFunction: 99 | Type: AWS::Serverless::Function 100 | Properties: 101 | CodeUri: ssh-agent-backend/ 102 | Handler: GetSignature.handler 103 | Policies: 104 | - DynamoDBReadPolicy: 105 | TableName: !Ref ResourcePermissionTable 106 | - SSMParameterReadPolicy: 107 | ParameterName: "*/key*" 108 | - KMSDecryptPolicy: 109 | KeyId: aws/ssm 110 | Events: 111 | SSHAgentBackend: 112 | Type: Api 113 | Properties: 114 | Path: /signature 115 | Method: post 116 | GetSignatureLogGroup: 117 | Type: AWS::Logs::LogGroup 118 | DependsOn: GetSignatureFunction 119 | Properties: 120 | RetentionInDays: 1 121 | LogGroupName: 122 | !Sub 123 | - '/aws/lambda/${LambdaName}' 124 | - LambdaName: !Ref GetSignatureFunction 125 | ResourcePermissionTable: 126 | Type: AWS::Serverless::SimpleTable 127 | Properties: 128 | PrimaryKey: 129 | Name: IamEntityUniqueId 130 | Type: String 131 | 132 | Outputs: 133 | # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function 134 | # Find out more about other implicit resources you can reference within SAM 135 | # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api 136 | Api: 137 | Description: "API Gateway endpoint URL for Prod stage for SSH Agent Backend" 138 | Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" 139 | PermissionsTable: 140 | Description: "DynamoDB table for IAM entity ssh key permissions" 141 | Value: !Ref ResourcePermissionTable 142 | --------------------------------------------------------------------------------