diff --git a/.gitignore b/.gitignore index ec639aa..c040d8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -*.auto.tfvars *.pem -#!terraform/dictionaries.auto.tfvars */.terraform* *.tfstate *.tfstate* @@ -8,23 +6,24 @@ plan/ plan/* site-content/angular/npk_config.js site-content/assets/js/cognito_config.js +/site-content/assets/js/dictionary-buckets.js **/node_modules -terraform/quotas.json -terraform/npk-settings.json -terraform/generated-settings.jsonnet -terraform/regions.json -terraform/*.tf.json -terraform-selfhost/*.tf.json -terraform/lambda_functions/zip_files/* -terraform/lambda_functions/proxy_api_handler/api_handler_variables.js -terraform/lambda_functions/status_reporter/npk_settings.js -terraform/lambda_functions/spot_monitor/npk_settings.js -terraform/lambda_functions/proxy_api_handler/userdata.sh -terraform/templates/api-handler-variables.tpl -terraform/templates/npk_settings.tpl -terraform-selfhost/components/ +npk-settings.json +render-npk* +lambda_functions/zip_files/* +lambda_functions/*/accountDetails.json +lambda_functions/*/ENVVARS +lambda_functions/proxy_api_handler/api_handler_variables.js +lambda_functions/status_reporter/npk_settings.js +lambda_functions/spot_monitor/npk_settings.js +lambda_functions/proxy_api_handler/userdata.sh +lambda_functions/execute_campaign/userdata.sh +templates/api-handler-variables.tpl +templates/npk_settings.tpl +tools/components/* tools/rules/* tools/wordlists/* -terraform-selfhost/upload_npkfile.sh -terraform-selfhost/upload_npkcomponents.sh -terraform-selfhost/sync_npkcomponents.sh \ No newline at end of file +tools/upload_npkfile.sh +tools/upload_npkcomponents.sh +tools/sync_npkcomponents.sh +**.bak \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4fd0219 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true \ No newline at end of file diff --git a/README.md b/README.md index 574e8ac..c0e0369 100644 --- a/README.md +++ b/README.md @@ -2,31 +2,41 @@ NPK is a distributed hash-cracking platform built entirely of serverless components in AWS including Cognito, DynamoDB, and S3. It was designed for easy deployment and the intuitive UI brings high-power hash-cracking to everyone. -![Image](/readme-content/dashboard-active.png) +![dashboard_progress](https://user-images.githubusercontent.com/143415/162669450-1b6da5bb-9e58-4cc5-941c-82b565f86b1b.png) 'NPK' is an initialism for the three primary atomic elements in fertilizer (Nitrogen, Phosphorus, and Potassium). Add it to your hashes to increase your cred yield! ## How it works -Lets face it - even the beastliest cracking rig spends a lot of time at idle. You sink a ton of money up front on hardware, then have the electricity bill to deal with. NPK lets you leverage extremely powerful hash cracking with the 'pay-as-you-go' benefits of AWS. For example, you can crank out as much as 1.2TH/s of NTLM for a mere $14.70/hr. NPK was also designed to fit easily within the free tier while you're not using it! Without the free tier, it'll still cost less than 25 CENTS per MONTH to have online! - -If you'd like to see it in action, check out the video here: https://www.youtube.com/watch?v=BrBPOhxkgzc +Let's face it - even the beastliest cracking rig spends a lot of time at idle. You sink a ton of money up front on hardware, then have the electricity bill to deal with. NPK lets you leverage extremely powerful hash cracking with the 'pay-as-you-go' benefits of AWS. For example, you can crank out 336 GH/s of NTLM for a mere $1/hr and scale it however you want. NPK was also designed to fit easily within the free tier while you're not using it! Without the free tier, it'll still cost less than $1 per MONTH to have online! ## Features ### 1. Super easy install -One config file, one command to run. That's about it. +Paste a one-liner into AWS CloudShell. Pretty easy. + +```source <(curl https://npkproject.io/cloudshell_install.sh)``` + +If you'd like to use the `dev` branch to use beta features, use this one-liner instead: + +```source <(curl https://npkproject.io/cloudshell_install_dev.sh)``` + +![cloudshell_oneliner](https://user-images.githubusercontent.com/143415/160295789-7b4f21fa-4ac3-4900-b78a-7a974b9f48ac.png) + +There are also [Step-by-step instructions](https://github.com/c6fc/npk/wiki/Step-by-step-Installation) if you want them. ### 2. Intuitive campaign builder Take the trial-and-error out of complex attack types with the intuitive campaign builder. With a couple clicks you can create advanced campaigns that even advanced Hashcat users would struggle to emulate. +![gpu_families](https://user-images.githubusercontent.com/143415/156901010-a6ae07e8-273b-496c-8916-b0d8955d840f.png) + ### 3. Campaign price and coverage estimates Take the guess-work out of your campaigns. See how far you'll get and how much it will cost *before* starting the campaign. -![Image](/readme-content/coverage.png) +![coverage](https://user-images.githubusercontent.com/143415/156901016-a63b2ea1-fcf0-4a48-99c5-a1c6ab2e3221.png) ### 4. Max price enforcement and runaway instance protection @@ -36,106 +46,75 @@ GPU instances are expensive. Runaway GPU instances are EXTREMELY expensive. NPK NPK supports multiple users, with strict separation of data, campaigns, and results between each user. It can optionally integrate with SAML-based federated identity providers to enable large teams to use NPK with minimal effort. -![Image](/readme-content/userManagement.png) +![user_administration](https://user-images.githubusercontent.com/143415/156901873-6c89bb50-5268-4382-aebd-e45ee5ff2f9f.png) ### 6. Data lifecycle management Configure how long data will stay in NPK with configurable lifecycle durations during installation. Hashfiles and results are automatically removed after this much time to keep things nicely cleaned up. -## Install - -NPK requires that you have the following installed: -* **awscli** (v2) -* **terraform** (v0.11) -* **jq** -* **jsonnet** -* **npm** +## Easy Install **ProTip:** To keep things clean and distinct from other things you may have in AWS, it's STRONGLY recommended that you deploy NPK in a fresh account. You can create a new account easily from the 'Organizations' console in AWS. **By 'STRONGLY recommended', I mean 'seriously don't install this next to other stuff'.** -```sh -$ git clone npk . -$ cd npk/terraform/ -npk/terraform$ cp npk-settings.json.sample npk-settings.json -``` +**Note: If you have an older version of NPK that you deployed without the one-liner, you'll need to destroy it before installing the new version** -Edit `npk-settings.json` to taste: - -* `backend_bucket`: Is the bucket to store the terraform state in. If it doesn't exist, NPK will create it for you. Replace '' with random characters to make it unique, or specify another bucket you own. -* `campaign_data_ttl`: This is the number of seconds that uploaded files and cracked hashes will last before they are automatically deleted. Default is 7 days. -* `campaign_max_price`: The maximum number of dollars allowed to be spent on a single campaign. -* `georestrictions`: An array of https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 country codes that access should be WHITELISTED for. Traffic originating from other countries will not be permitted. -* `useCustomDNS`: A boolean value for whether to use custom domain names for your NPK installation. if set to `true`, you must configure `route53Zone` and `dnsNames` below. -* `route53Zone`: The Route53 Zone ID for the domain or subdomain you're going to host NPK with. You must configure this zone yourself in the same account before installing NPK. -* `dnsNames`: This is where you configure the DNS names for the console and api endpoints for your NPK installation. Both domains must be at the same depth as one another; e.g. {www,api}.npk.yourdomain.com -* `awsProfile`: The profile name in `~/.aws/credentials` that you want to piggyback on for the installation. -* `criticalEventsSMS`: The cellphone number of a destination to receive critical events to. Only catastrophic errors are reported here, so use a real one. -* `adminEmail`: The email address of the administrator and first user of NPK. Once the installation is complete, this is where you'll receive your credentials. -* `useSAML`: Set to `true` if you want to enable SAML-based federated authentication. -* `sAMLMetadataFile` or `sAMLMetadataUrl`: Only one can be configured, and it's required if `useSAML` is `true`. - -Here's an example of a completed config file with custom DNS and no SAML: - -```json -{ - "backend_bucket": "backend-terraform-npkdev", - "campaign_data_ttl": 604800, - "campaign_max_price": 50, - "georestrictions": [], - "useCustomDNS": true, - "route53Zone": "Z05471496OWNC3E2EHCI", - "dnsNames": { - "www": [ - "www.npk.yourdomain.com" - ], - "api": [ - "api.npk.yourdomain.com" - ] - }, - "awsProfile": "npkdev", - "criticalEventsSMS": "+12085551234", - "adminEmail": "you@yourdomain.com", - "debug_lambda": true, - - "useSAML": false, - "sAMLMetadataFile": "" -} -``` -After that, run the deploy! +1. Log into the AWS Console for the account you want to deploy to. +2. Click the AWS CloudShell button in the top right corner. +![cloudshell_icon](https://user-images.githubusercontent.com/143415/156901055-5107d4b2-c5b4-4ca5-8454-57e7504e2316.png) -```sh -npk/terraform$ ./deploy.sh -``` +3. Paste in the one-liner: `source <(curl https://npkproject.io/cloudshell_install.sh)` +4. Use the wizard to complete the configuration + +When the deploy finishes, you'll be dropped to a custom prompt, which indicates that NPK is deployed and CloudShell is connected to it. + +![deployed_prompt](https://user-images.githubusercontent.com/143415/160296855-d2b5a383-445f-44a7-8a06-0051ad215536.png) + +If you said 'no' at the end of the wizard, you can run `npm run deploy` from this prompt to finish the deployment. + +See https://github.com/c6fc/npk/wiki/Detailed-NPK-Settings for more details about advanced configurations, or https://github.com/c6fc/npk/wiki/Configuring-SAML-SSO for help configuring SAML SSO. -For more details about each setting, their effects, and allowed values, check out [the wiki](https://github.com/Coalfire-Research/npk/wiki/Detailed-NPK-Settings). For more details around custom installations, see [Detailed Instructions](https://github.com/Coalfire-Research/npk/wiki/Detailed-Usage-Instructions). +## Connect to an existing installation -NPK will use the specified AWS cli profile to fully deploy NPK and provision the first user. If you'd like to change the configuration, simply run `./deploy.sh` again afterward. While it's deploying, pay a visit to https://aws.amazon.com/marketplace/pp/B07S5G9S1Z to subscribe and accept the terms of NVidia's AMIs. NPK uses these to ensure compatability with the GPUs. There is no cost associated with this step, but allows NPK to use these AMIs on your behalf. +**Note: If you have an older version of NPK that you deployed without the one-liner, you'll need to destroy it before installing the new version** -Once it's done, you'll receive an email with the URL and credentials to your deployment: +To connect to an existing NPK installation (which is needed to modify or uninstall NPK), log into the AWS account where NPK resides, click the CloudShell icon, and paste in the one-liner: -![Image](/readme-content/npk-invite.png) +```source <(curl https://npkproject.io/cloudshell_install.sh)``` -**NOTE: CloudFront may take several minutes to come up after the deployment is done. This is normal. Grab yourself a cup of coffee after the deploy and give the cloud a few minutes to do its magic.** +CloudShell will now connect to NPK (which may take a minute or two), after which you'll drop to a new prompt that looks like this: + +![deployed_prompt](https://user-images.githubusercontent.com/143415/160296855-d2b5a383-445f-44a7-8a06-0051ad215536.png) + +You're now connected to your NPK installation. This can be performed by any user in the AWS account with admin rights, and can be performed in any region. ## Modify Install -You can change the settings of an install without losing your existing campaigns. Edit `npk-settings.json` as necessary, then rerun `deploy.sh`. That easy! +You can change the settings of an install without losing your existing campaigns. Use the instructions above to connect to your NPK installation, then edit `npk-settings.json` as necessary and run `npm run update`. It's that easy! ```sh -npk/terraform$ vim npk-settings.json -npk/terraform$ ./deploy.sh +cloudshell-user$ source <(curl https://npkproject.io/cloudshell_install.sh) +@c6fc/npk> vim npk-settings.json +< ... change your settings however you need > +@c6fc/npk> npm run update ``` +## Uploading your own dictionaries and rule files + +Once NPK has been deployed, administrative users can use the NPK console to upload wordlists and rule files using the 'Dictionary Management' link in the sidebar. NPK supports plain-text and gzipped dictionaries. + +![upload_dictionaries](https://user-images.githubusercontent.com/143415/156901465-6e906177-e9fa-4189-8cda-0735813d02c0.png) + ## Uninstall -You can completely turn down NPK and delete all of its data from AWS with a single command: +You can completely turn down NPK and delete all of its data from AWS very easily. Just attach your CloudShell to NPK, then run `npm run destroy`: ```sh -npk/terraform$ terraform destroy +cloudshell-user$ source <(curl https://npkproject.io/cloudshell_install.sh) +@c6fc/npk> npm run destroy ``` # Official Discord Channel -Come hang out on Discord! +Have questions, need help, want to contribute or brag about a win? Come hang out on Discord! -[![Porchetta Industries](https://discordapp.com/api/guilds/736724457258745996/widget.png?style=banner3)](https://discord.gg/k5PQnqSNDF) \ No newline at end of file +[![Official c6fc Discord](https://discordapp.com/api/guilds/825770240309985310/widget.png?style=banner3)](https://discord.gg/w4G5k92czX) \ No newline at end of file diff --git a/bin/index.js b/bin/index.js new file mode 100644 index 0000000..976906e --- /dev/null +++ b/bin/index.js @@ -0,0 +1,603 @@ +'use strict'; + +const fs = require("fs"); +const path = require("path"); +const yargs = require("yargs"); +const readline = require("readline"); + +const { exec } = require("child_process"); +const { Sonnet } = require("@c6fc/sonnetry"); +const { Jsonnet } = require("@hanazuki/node-jsonnet"); + +const sonnetry = new Sonnet({ + renderPath: './render-npk', + cleanBeforeRender: true +}); + +let computedQuotas; + +async function deploy(skipInit, autoApprove) { + + let settings; + const aws = sonnetry.aws; + + try { + settings = JSON.parse(fs.readFileSync('./npk-settings.json')); + } catch (e) { + console.log(e); + console.log("\n[!] Unable to open npk-settings.json. Does it exist?"); + return false; + } + + const validatedSettings = {}; + + // Check for invalid settings + const allowedSettings = [ + 'campaign_data_ttl', + 'campaign_max_price', + 'georestrictions', + 'route53Zone', + 'awsProfile', + 'criticalEventsSMS', + 'adminEmail', + 'sAMLMetadataFile', + 'sAMLMetadataUrl', + 'primaryRegion', + 'useRegions' + ]; + + const badSettings = Object.keys(settings) + .filter(e => allowedSettings.indexOf(e) < 0) + .map(e => console.log(`[!] Invalid setting key [${e}] in npk-settings.json`)); + + if (badSettings.length > 0) { + console.log('[!] Fix your settings, then try again.'); + return false; + } + + // Determine the route53 zone information. + if (!!settings.route53Zone) { + const route53 = new aws.Route53(); + let zone; + + try { + zone = await route53.getHostedZone({ + Id: settings.route53Zone + }).promise(); + + validatedSettings.dnsBaseName = zone.HostedZone.Name.slice(0, -1) + + console.log("[+] Validated route53Zone"); + + } catch(e) { + console.log(`[!] Unable to retrieve hosted zone. ${e}`); + return false; + } + } + + // Get AZ/Quota info + Object.assign(validatedSettings, computedQuotas); + + const iam = new aws.IAM(); + + try { + await iam.getRole({ + RoleName: "AWSServiceRoleForEC2Spot" + }).promise(); + } catch (e) { + console.log(`[*] EC2 spot SLR is not present. Creating...`); + + try { + await iam.createServiceLinkedRole({ + AWSServiceName: "spot.amazonaws.com" + }).promise(); + } catch (e) { + console.trace(e); + console.log(`[!] Unable to create service linked role: ${e}`); + } + } + + try { + await iam.getRole({ + RoleName: "AWSServiceRoleForEC2SpotFleet" + }).promise(); + } catch (e) { + console.log(`[*] EC2 spot fleet SLR is not present. Creating...`); + + try { + await iam.createServiceLinkedRole({ + AWSServiceName: "spotfleet.amazonaws.com" + }).promise(); + } catch (e) { + console.trace(e); + console.log(`[!] Unable to create service linked role: ${e}`); + } + } + + console.log("\n[*] All prerequisites finished. Generating infrastructure configurations."); + + Object.assign(validatedSettings, computedQuotas); + + sonnetry.export('validatedSettings', validatedSettings); + + try { + await sonnetry.render('terraform.jsonnet'); + } catch (e) { + console.trace(e); + console.log(`\n[!] Failed to generate NPK configurations.`); + return false; + } + + sonnetry.write(); + + console.log(`[+] Configurations updated successfully. Preparing to deploy.`); + + try { + sonnetry.apply(skipInit, autoApprove); + } catch (e) { + console.trace(e); + console.log('\n[!] Failed to apply configuration.') + return false; + } + + return true; +} + +async function getAZsWithQuota() { + + const aws = sonnetry.aws; + + const result = {}; + + // Generate region list. AZ's are done later to only capture those with appropriate quotas. + const ec2 = new aws.EC2({ region: "us-east-1" }); + let regions; + + try { + regions = await ec2.describeRegions().promise(); + + regions = regions.Regions + .filter(r => ["opt-in-not-required", "opted-in"].indexOf(r.OptInStatus) > -1) + .map(r => r.RegionName); + + } catch (e) { + console.log(`[!] Unable to retrieve region list. ${e}`); + return false; + } + + result.providerRegions = regions; + + console.log("[+] Retrieved all active regions"); + + // Check quotas for all regions. + const families = JSON.parse(fs.readFileSync('./jsonnet/gpu_instance_families.json')); + + const quotaCodes = Object.keys(families).reduce((codes, family) => { + const code = families[family].quotaCode; + + if (codes.indexOf(code) == -1) { + codes.push(code); + } + + return codes; + }, []); + + let maxQuota = 0; + const regionQuotas = {}; + const quotaPromises = regions.reduce((quotas, region) => { + const sq = new aws.ServiceQuotas({ region }); + + quotaCodes.map(qc => { + quotas.push(sq.getServiceQuota({ + ServiceCode: 'ec2', + QuotaCode: qc + }).promise().then((data) => { + + const q = data.Quota; + if (q.Value > 0) { + regionQuotas[region] ??= {}; + + regionQuotas[region][q.QuotaCode] = q.Value; + maxQuota = (q.Value > maxQuota) ? q.Value : maxQuota; + } + }).catch(e => { + console.log(`[-] Unable to get quotas for ${region}, but this isn't fatal.`); + regions = regions.filter(r => r != region); + })); + }); + + return quotas; + }, []); + + await Promise.all(quotaPromises); + + if (maxQuota == 0) { + console.log("[!] You are permitted zero GPU spot instances across all types and regions."); + console.log("You cannot proceed without increasing your limits."); + console.log("-> A limit of at least 4 is required for minimal capacity."); + console.log("-> A limit of 40 is required to use the largest instances."); + + return false; + } + + result.quotas = regionQuotas; + + console.log("[+] Retrieved quotas."); + + const instanceRegions = {}; + const instanceTypes = Object.keys(families).reduce((instances, family) => { + const firstInstance = Object.keys(families[family].instances)[0]; + instances[firstInstance] = family; + instanceRegions[family] = []; + + return instances; + }, {}); + + const offeringsPromises = regions.reduce((offerings, region) => { + const ec2 = new aws.EC2({ region }); + + offerings.push(ec2.describeInstanceTypeOfferings({ + LocationType: "region" + }).promise().then((data) => { + + const instances = data.InstanceTypeOfferings + .filter(e => Object.keys(instanceTypes).includes(e.InstanceType)) + .map(e => { + instanceRegions[instanceTypes[e.InstanceType]].push(region); + }); + }).catch(e => { + console.log(`[-] Unable to get instance support for ${region}, but this isn't fatal.`); + regions = regions.filter(r => r != region); + })); + + return offerings; + }, []); + + await Promise.all(offeringsPromises); + + result.familyRegions = instanceRegions; + + console.log("[+] Retrieved per-region instance support."); + + // Retrieve availability zones for regions with appropriate quotas. + const azs = {}; + const azPromises = Object.keys(regionQuotas).reduce((promises, region) => { + const ec2 = new aws.EC2({ region }); + + azs[region] = []; + + promises.push(ec2.describeAvailabilityZones().promise().then((data) => { + data.AvailabilityZones + .filter(a => a.State == "available") + .filter(a => a.ZoneType == "availability-zone") + .map(a => azs[region].push(a.ZoneName)); + }).catch(e => { + console.log(`[-] Unable to get availability zones for ${region}, but this isn't fatal.`); + regions = regions.filter(r => r != region); + })); + + return promises; + }, []); + + await Promise.all(azPromises); + + result.regions = azs; + + console.log("[+] Retrieved availability zones."); + + return result; +} + +async function configureInteractive() { + + const aws = sonnetry.aws; + const inquirer = require('inquirer'); + + let settings = {}; + if (fs.existsSync('npk-settings.json')) { + settings = JSON.parse(fs.readFileSync('npk-settings.json')); + console.log("[*] Loading existing settings."); + } + + const ec2 = new aws.EC2(); + let regions = await ec2.describeRegions().promise() + + regions = regions.Regions + .filter(e => e.OptInStatus != "not-opted-in") + .map(e => e.RegionName) + + const route53 = new aws.Route53(); + let hostedZones = await route53.listHostedZones({ + MaxItems: "10" + }).promise(); + + if (hostedZones.HostedZones.isTruncated) { + console.log("[!] You have too many Route53 Hosted Zones for interactive configurations. Sorry."); + return false + } + + hostedZones = hostedZones.HostedZones.map(e => Object.create({ + name: e.Name, + value: e.Id.split('/')[2] + })); + hostedZones.unshift(new inquirer.Separator()); + hostedZones.unshift({ + name: "- None -", + value: null + }); + + const questions = [{ + type: 'list', + name: 'route53Zone', + message: 'Use custom domain?', + choices: hostedZones, + default: settings.route53Zone ?? "- None -" + }, { + type: 'list', + name: 'primaryRegion', + message: 'Which region do you plan to use most?', + choices: Object.keys(computedQuotas.regions), + // choices: regions, + default: settings.primaryRegion ?? "us-west-2" + }, { + type: 'checkbox', + name: 'useRegions', + message: 'Which regions would you like to use?', + choices: Object.keys(computedQuotas.regions), + default: settings.useRegions ?? Object.keys(computedQuotas.regions) + }, { + type: 'input', + name: 'adminEmail', + message: 'What is the admin user\'s email address?', + default: settings.adminEmail ?? "" + }, { + type: 'input', + name: 'campaign_max_price', + message: 'Max campaign price in USD:', + default: 50, + filter(value) { + return value / 1; + } + }, { + type: 'confirm', + name: 'deploy', + message: 'NPK is configured. Deploy now?', + default: true + }]; + + // Remove the Route53 question if there are no zones. + if (hostedZones.length == 2) { + questions.shift(); + } + + await drainStdin(0); + + const answers = await inquirer.prompt(questions); + + const deployNow = answers.deploy; + delete answers.deploy; + + if (!answers.useRegions.includes(answers.primaryRegion)) { + answers.useRegions.push(answers.primaryRegion); + } + + fs.writeFileSync('npk-settings.json', JSON.stringify(Object.assign(settings, answers), null, '\t')); + + if (!deployNow) { + console.log("[-] Exiting on user command. Use 'npm run deploy' to deploy"); + process.exit(0); + } +} + +function drainStdin(duration) { + return new Promise((success, failure) => { + const onData = function() {}; + const onEnd = function() { + process.stdin.removeListener('data', onData); + process.stdin.removeListener('end', onEnd); + return success(); + }; + + process.stdin.on('data', onData); + process.stdin.on('end', onEnd); + + setTimeout(onEnd, duration); + }); +} + +function checkAWSProfile() { + if (fs.existsSync('./npk-settings.json')) { + const settings = JSON.parse(fs.readFileSync('./npk-settings.json')); + if (!!settings.awsProfile && process.env.AWS_PROFILE != settings.awsProfile) { + process.env.AWS_PROFILE = settings.awsProfile; + console.log("[+] You were about to deploy to the wrong profile. I've corrected it for you."); + } + } + + return true; +} + +async function initializeSettings(argv) { + await sonnetry.bootstrap('c6fc_npk'); + if (!fs.existsSync('./npk-settings.json')) { + const settingsContent = await sonnetry.getArtifact('npk-settings'); + if (!!settingsContent) { + fs.writeFileSync('./npk-settings.json', settingsContent.toString()); + console.log('[+] Retrieved NPK settings from Sonnetry'); + } else { + const s3 = new sonnetry.aws.S3(); + let bootstrap_bucket = await sonnetry.getBootstrapBucket(); + + try { + const settings = await s3.getObject({ + Bucket: bootstrap_bucket, + Key: 'sonnetry/c6fc_npk/npk-settings.json' + }).promise(); + + fs.writeFileSync('./npk-settings.json', settings.Body); + + console.log('[+] Retrieved npk-settings.json from Sonnetry'); + } catch (e) { + console.log('[-] No settings file found in Sonnetry. Will save after deploying.'); + } + } + } + + if (argv.interactive || !fs.existsSync('./npk-settings.json')) { + await configureInteractive(); + } + + const settings = JSON.parse(fs.readFileSync('./npk-settings.json')); + + // Get the persisted SAML Metadata File + if (!!settings.sAMLMetadataFile) { + if (!fs.existsSync(settings.sAMLMetadataFile)) { + const sAMLMetadataFileContent = await sonnetry.getArtifact('sAMLMetadataFile'); + + if (!!sAMLMetadataFileContent) { + fs.mkdirSync(path.dirname(settings.sAMLMetadataFile), { recursive: true }); + fs.writeFileSync(settings.sAMLMetadataFile, sAMLMetadataFileContent.toString()); + console.log('[+] Retrieved SAML metadata file from Sonnetry'); + } + } + } + + return settings; +} + +async function persistSettings(settings) { + await sonnetry.putArtifact('npk-settings', JSON.stringify(settings)); + + // Get the persisted SAML Metadata File + if (!!settings.sAMLMetadataFile) { + const sAMLMetadataFileContent = fs.readFileSync(settings.sAMLMetadataFile); + await sonnetry.putArtifact('sAMLMetadataFile', sAMLMetadataFileContent); + console.log('[+] SAML metadata file saved to Sonnetry'); + } + + console.log('[+] NPK settings saved to Sonnetry'); +} + +function showHelloBanner() { + console.log("***********************************************************"); + console.log(" Hello friend! Thanks for using NPK!"); + console.log(""); + console.log(" Need help, want to contribute, or want to brag about a win?"); + console.log(" Join us on Discord! [ https://discord.gg/k5PQnqSNDF ]"); + console.log(""); + console.log(" Sincerely, @c6fc"); + console.log("***********************************************************"); + console.log(""); +} + +function showHelpBanner() { + console.log("[!] Deployment failed. If you're having trouble, hop in Discord for help."); + console.log("--> NPK Official Discord: https://discord.gg/k5PQnqSNDF"); + console.log(""); + process.exit(1); +} + +(async () => { + + yargs + .usage("Syntax: $0 [options]") + .command("*", "Invalid command", (yargs) => { + yargs + }, (argv) => { + console.log("[~] Invalid command."); + }) + .command("deploy", "Deploys NPK", (yargs) => { + return yargs.option('interactive', { + alias: 'i', + type: 'boolean', + description: 'Configure NPK interactively before deployment.' + }).option('skipInit', { + alias: 's', + type: 'boolean', + description: 'Skip the Terraform Init phase. Useful for development.' + }).option('autoApprove', { + alias: 'y', + type: 'boolean', + description: 'Auto-approve Terraform changes. Useful for development.' + }); + }, async (argv) => { + + showHelloBanner(); + checkAWSProfile(); + + await sonnetry.auth(); + + computedQuotas = await getAZsWithQuota(); + + if (computedQuotas === false) { + console.log(`[!] Unable to proceed.`); + return false; + } + + const settings = await initializeSettings(argv); + + if (!!settings?.useRegions) { + Object.keys(computedQuotas.regions).map(r => { settings.useRegions.includes(r) || delete computedQuotas.regions[r] }) + } + + const success = await deploy(argv.skipInit, argv.autoApprove); + + if (!success) { + showHelpBanner(); + return false; + } + + await persistSettings(settings); + + console.log("\n[+] NPK successfully deployed. Happy hunting."); + + }) + .command("destroy", "Removes NPK and destroys all resources", (yargs) => { + return yargs.option('interactive', { + alias: 'i', + type: 'boolean', + description: 'Configure NPK interactively before deployment.' + }).option('skipInit', { + alias: 's', + type: 'boolean', + description: 'Skip the Terraform Init phase. Useful for development.' + }).option('autoApprove', { + alias: 'y', + type: 'boolean', + description: 'Auto-approve Terraform changes. Useful for development.' + }); + }, async (argv) => { + + showHelloBanner(); + checkAWSProfile(); + + await sonnetry.auth(); + + computedQuotas = await getAZsWithQuota(); + + if (computedQuotas === false) { + console.log(`[!] Unable to proceed.`); + return false; + } + + const settings = await initializeSettings(argv); + + if (!!settings?.useRegions) { + Object.keys(computedQuotas.regions).map(r => { settings.useRegions.includes(r) || delete computedQuotas.regions[r] }) + } + + const success = await sonnetry.destroy(argv.skipInit, argv.autoApprove); + + if (!success) { + showHelpBanner(); + return false; + } + + await persistSettings(settings); + + console.log("\n[+] NPK successfully destroyed. Until next time, Mr. Wick."); + }) + .showHelpOnFail(false) + .help("help") + .argv; +})(); \ No newline at end of file diff --git a/jsonnet/acm.libsonnet b/jsonnet/acm.libsonnet new file mode 100644 index 0000000..5f69c0d --- /dev/null +++ b/jsonnet/acm.libsonnet @@ -0,0 +1,32 @@ +{ + certificate(name, dns_name, san, zone): { + aws_acm_certificate: { + [name]: { + provider: "aws.us-east-1", + domain_name: dns_name, + subject_alternative_names: san, + validation_method: "DNS", + + lifecycle: { + create_before_destroy: true + } + } + }, + aws_route53_record: { + [name + "-acm"]: { + name: "${tolist(aws_acm_certificate." + name + ".domain_validation_options)[0].resource_record_name}", + type: "${tolist(aws_acm_certificate." + name + ".domain_validation_options)[0].resource_record_type}", + records: ["${tolist(aws_acm_certificate." + name + ".domain_validation_options)[0].resource_record_value}"], + zone_id: zone, + ttl: 60 + } + }, + aws_acm_certificate_validation: { + [name]: { + provider: "aws.us-east-1" , + certificate_arn: "${aws_acm_certificate." + name + ".arn}", + validation_record_fqdns: ["${aws_route53_record." + name + "-acm.fqdn}"] + } + } + } +} \ No newline at end of file diff --git a/jsonnet/api_gateway_map.libsonnet b/jsonnet/api_gateway_map.libsonnet new file mode 100644 index 0000000..9d40e38 --- /dev/null +++ b/jsonnet/api_gateway_map.libsonnet @@ -0,0 +1,119 @@ +local join_objects(objs) = + local aux(arr, i, running) = + if i >= std.length(arr) then + running + else + aux(arr, i + 1, std.mergePatch(running, arr[i])) tailstrict; + aux(objs, 0, {}); + +local rest_api_map(api, pathParts) = { + foo(api, parent, path, object):: + local thispath = std.strReplace(std.strReplace(std.strReplace("%s-%s" % [path, object.pathPart], "}", ""), "{", ""), "+", ""); + std.mergePatch({ + + aws_api_gateway_resource: { + [thispath]: { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [api], + parent_id: parent, + path_part: object.pathPart + } + }, + aws_api_gateway_method: { + [std.asciiLower("%s_%s" % [thispath, method])]: { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [api], + resource_id: "${aws_api_gateway_resource.%s.id}" % [thispath], + http_method: method + } + object.methods[method].parameters + for method in std.objectFields(object.methods) + }, + aws_api_gateway_integration: { + [std.asciiLower("%s_%s" % [thispath, method])]: { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [api], + resource_id: "${aws_api_gateway_resource.%s.id}" % [thispath], + http_method: "${aws_api_gateway_method.%s.http_method}" % [std.asciiLower("%s_%s" % [thispath, method])] + } + + if (std.objectHas(object.methods[method], "lambdaIntegration")) then { + integration_http_method: "POST", + type: "AWS_PROXY", + uri: "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.%s.arn}/invocations" % [object.methods[method].lambdaIntegration] + } else {} + + if (std.objectHas(object.methods[method], "optionsIntegration")) then { + type: "MOCK", + request_templates: { + "application/json": "{\"statusCode\": 200}", + } + } else {} + for method in std.objectFields(object.methods) + }, + aws_api_gateway_method_response: std.prune({ + [std.asciiLower("%s_%s" % [thispath, method])]: if (std.objectHas(object.methods[method], "optionsIntegration")) then { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [api], + resource_id: "${aws_api_gateway_resource.%s.id}" % [thispath], + http_method: method, + status_code: 200, + response_models: { + "application/json": "Empty" + }, + response_parameters: { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true + }, + depends_on: ["aws_api_gateway_method.%s" % [std.asciiLower("%s_%s" % [thispath, method])]] + } else null + for method in std.objectFields(object.methods) + }), + aws_api_gateway_integration_response: std.prune({ + [std.asciiLower("%s_%s" % [thispath, method])]: if (std.objectHas(object.methods[method], "optionsIntegration")) then { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [api], + resource_id: "${aws_api_gateway_resource.%s.id}" % [thispath], + http_method: "${aws_api_gateway_method_response.%s.http_method}" % [std.asciiLower("%s_%s" % [thispath, method])], + status_code: 200, + response_parameters: { + "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", + "method.response.header.Access-Control-Allow-Methods": "'GET,OPTIONS,POST,PUT,DELETE'", + "method.response.header.Access-Control-Allow-Origin": "'*'" + }, + + depends_on: ["aws_api_gateway_integration.%s" % [std.asciiLower("%s_%s" % [thispath, method])]] + } else null + for method in std.objectFields(object.methods) + }), + aws_lambda_permission: std.prune({ + [std.asciiLower("%s_%s" % [thispath, method])]: if (std.objectHas(object.methods[method], "lambdaIntegration")) then { + statement_id: "AllowExecutionFromAPIGateway-%s" % [thispath], + action: "lambda:InvokeFunction", + function_name: "${aws_lambda_function.%s.arn}" % [object.methods[method].lambdaIntegration], + principal: "apigateway.amazonaws.com", + source_arn: "arn:aws:execute-api:${var.region}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.%s.id}/*" % [api] + } else null + for method in std.objectFields(object.methods) + }) + }, if (std.objectHas(object, 'children')) then + join_objects([self.foo(api, "${" + std.strReplace(std.strReplace(std.strReplace("aws_api_gateway_resource.%s-%s.id" % [path, object.pathPart], "}", ""), "{", ""), "+", "") + "}", thispath, item) for item in object.children]) + else { }), + + resource: join_objects([self.foo(api, "${aws_api_gateway_rest_api.%s.root_resource_id}" % [api], "root", item) for item in pathParts.root.children]), +}; + +local rest_api(name, map) = + local api_map = rest_api_map(name, map) tailstrict; + std.mergePatch({ + resource: { + aws_api_gateway_rest_api: { + [name]: { + name: name, + } + map.parameters + }, + aws_api_gateway_deployment: { + [name]: map.deployment + { + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % [name], + depends_on: ["aws_api_gateway_integration.%s" % [integration] for integration in std.objectFields(api_map.resource.aws_api_gateway_integration)], + } + } + } + }, api_map); + +{ + rest_api: rest_api +} \ No newline at end of file diff --git a/jsonnet/cloudfront.libsonnet b/jsonnet/cloudfront.libsonnet new file mode 100644 index 0000000..82102db --- /dev/null +++ b/jsonnet/cloudfront.libsonnet @@ -0,0 +1,79 @@ + +{ + resource(settings): { + aws_cloudfront_origin_access_identity: { + npk: { + comment: "OAI for NPK", + }, + }, + aws_cloudfront_distribution: { + npk: { + comment: "NPK", + enabled: true, + is_ipv6_enabled: false, + default_root_object: "index.html", + logging_config: { + include_cookies: false, + bucket: "${aws_s3_bucket.logs.bucket_domain_name}", + prefix: "cloudfront", + }, + origin: { + domain_name: "${aws_s3_bucket.static_site.bucket_regional_domain_name}", + origin_id: "static", + + s3_origin_config: { + origin_access_identity: "${aws_cloudfront_origin_access_identity.npk.cloudfront_access_identity_path}", + } + }, + default_cache_behavior: { + allowed_methods: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], + cached_methods: ["GET", "HEAD"], + target_origin_id: "static", + forwarded_values: { + query_string: false, + headers: ["Origin","Access-Control-Allow-Origin","Access-Control-Request-Method","Access-Control-Request-Headers"], + cookies: { + forward: "none", + } + }, + viewer_protocol_policy: "redirect-to-https", + min_ttl: 0, + max_ttl: 300, + default_ttl: 0, + }, + price_class: "PriceClass_100", + tags: { + Project: "NPK", + }, + viewer_certificate: { + cloudfront_default_certificate: true, + } + } + if std.objectHas(settings, "georestrictions") && std.length(settings.georestrictions) > 0 then { + restrictions: { + geo_restriction: { + restriction_type: "whitelist", + locations: settings.georestrictions, + } + } + } else { + restrictions: { + geo_restriction: { + restriction_type: "none", + } + } + } + if settings.useCustomDNS then { + aliases: [settings.wwwEndpoint], + viewer_certificate: { + cloudfront_default_certificate: false, + acm_certificate_arn: "${aws_acm_certificate.main.arn}", + ssl_support_method: "sni-only", + } + } else { } + } + }, + output: { + cloudfront_url: { + value: "${aws_cloudfront_distribution.npk.domain_name}" + } + } +} \ No newline at end of file diff --git a/jsonnet/cloudwatch.libsonnet b/jsonnet/cloudwatch.libsonnet new file mode 100644 index 0000000..df495a4 --- /dev/null +++ b/jsonnet/cloudwatch.libsonnet @@ -0,0 +1,58 @@ +{ + resource: { + aws_cloudwatch_event_rule: { + spot_monitor: { + name: "npkSpotMonitor", + description: "Trigger spot monitor every 1 minute", + schedule_expression: "rate(1 minute)", + role_arn: "${aws_iam_role.cloudwatch_invoke_spot_monitor.arn}", + is_enabled: true + } + }, + aws_cloudwatch_event_target:{ + spot_monitor: { + rule: "${aws_cloudwatch_event_rule.spot_monitor.name}", + arn: "${aws_lambda_function.spot_monitor.arn}" + } + }, + aws_iam_role:{ + cloudwatch_invoke_spot_monitor: { + name_prefix: "npk_cloudwatch_spot_monitor_", + description: "Cloudwatch Spot Monitor Role", + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow","Principal": {"Service": ["events.amazonaws.com"]}, + "Action": "sts:AssumeRole" + }]}' + }, + cloudwatch_invoke_spot_interrupt_catcher: { + name_prefix: "npk_cloudwatch_spot_interrupt_", + description: "Cloudwatch Spot Interupt Catcher Role", + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow","Principal": {"Service": ["events.amazonaws.com"]}, + "Action": "sts:AssumeRole" + }]}' + } + }, + aws_iam_role_policy:{ + cloudwatch_invoke_spot_monitor: { + name_prefix: "npk_cloudwatch_invoke_spot_monitor_policy_", + role: "${aws_iam_role.cloudwatch_invoke_spot_monitor.id}", + policy: "${data.aws_iam_policy_document.cloudwatch_invoke_spot_monitor.json}" + }, + cloudwatch_invoke_spot_interrupt_catcher: { + name_prefix: "npk_cloudwatch_invoke_spot_interrupt_catcher_policy_", + role: "${aws_iam_role.cloudwatch_invoke_spot_interrupt_catcher.id}", + policy: "${data.aws_iam_policy_document.cloudwatch_invoke_spot_interrupt_catcher.json}" + } + }, + aws_lambda_permission: { + spot_monitor: { + statement_id: "spot_monitor", + action: "lambda:InvokeFunction", + function_name: "${aws_lambda_function.spot_monitor.function_name}", + principal: "events.amazonaws.com", + source_arn: "${aws_cloudwatch_event_rule.spot_monitor.arn}", + } + } + } +} \ No newline at end of file diff --git a/jsonnet/cognito.libsonnet b/jsonnet/cognito.libsonnet new file mode 100644 index 0000000..1a4d9ee --- /dev/null +++ b/jsonnet/cognito.libsonnet @@ -0,0 +1,123 @@ +{ + resource(settings): { + aws_cognito_user_pool: { + npk: { + name: "NPK", + mfa_configuration: "${var.cognito_user_mfa}", + password_policy: { + minimum_length: 12, + require_lowercase: true, + require_uppercase: true, + require_symbols: false, + require_numbers: true + }, + admin_create_user_config: { + allow_admin_create_user_only: true, + invite_message_template: { + email_subject: "NPK Invitation", + email_message: "You've been invited to join an NPK deployment at https://${aws_cloudfront_distribution.npk.domain_name}. Use {username} and {####} to log in.", + sms_message: "NPK user created. Use {username} and {####} to log in." + } + if settings.useCustomDNS then { + email_message: "You've been invited to join an NPK deployment at https://" + settings.wwwEndpoint + ". Use {username} and {####} to log in." + } else { } + }, + auto_verified_attributes: ["email"], + username_attributes: ["email"] + } + }, + aws_cognito_user_pool_client: { + npk: { + name: "npk_client", + user_pool_id: "${aws_cognito_user_pool.npk.id}", + generate_secret: false + } + if settings.useSAML then { + allowed_oauth_flows_user_pool_client: "true", + supported_identity_providers: ["${aws_cognito_identity_provider.saml.provider_name}"], + allowed_oauth_scopes: ["email", "openid"], + allowed_oauth_flows: ["code"], + callback_urls: ["https://" + settings.wwwEndpoint], + logout_urls: ["https://" + settings.wwwEndpoint] + } else {} + }, + aws_cognito_identity_pool: { + main: { + identity_pool_name: "NPK Identity Pool", + allow_unauthenticated_identities: false, + cognito_identity_providers: { + client_id: "${aws_cognito_user_pool_client.npk.id}", + provider_name: "${aws_cognito_user_pool.npk.endpoint}", + server_side_token_check: false, + }, + provisioner: { + "local-exec": { + command: "aws --region %s cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --user-attributes='[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}" % [settings.primaryRegion] + } + } + } + }, + aws_cognito_user_group: { + "npk-admins": { + name: "npk-admins", + user_pool_id: "${aws_cognito_user_pool.npk.id}", + description: "Administrators of NPK", + precedence: "0", + role_arn: "${aws_iam_role.cognito_admins.arn}" + } + } + } + (if settings.useSAML then { + aws_cognito_identity_provider: { + saml: { + user_pool_id: "${aws_cognito_user_pool.npk.id}", + provider_name: "NPKSAML", + provider_type: "SAML", + + provider_details: { + IDPSignout: "false" + } + if std.objectHas(settings, "sAMLMetadataUrl") then { + MetadataURL: settings.sAMLMetadataUrl + } else {} + if std.objectHas(settings, "sAMLMetadataFile") then { + MetadataFile: "${file(\"" + settings.sAMLMetadataFile + "\")}" + } else {}, + + attribute_mapping: { + email: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" + } + } + } + } else {}) + (if !settings.useCustomDNS then { + aws_cognito_user_pool_domain: { + saml: { + domain: "${random_string.saml_domain.result}", + user_pool_id: "${aws_cognito_user_pool.npk.id}" + } + } + } else { + aws_cognito_user_pool_domain: { + saml: { + depends_on: ["aws_route53_record.www"], + domain: settings.authEndpoint, + certificate_arn: "${aws_acm_certificate.main.arn}", + user_pool_id: "${aws_cognito_user_pool.npk.id}" + } + } + }), + output(settings): { + admin_create_user_command: { + value: "aws --region %s cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --user-attributes='[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}" % [settings.primaryRegion], + }, + admin_join_group_command: { + value: "aws --region %s cognito-idp admin-add-user-to-group --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --group npk-admins --user-attributes '[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}" % [settings.primaryRegion], + }, + saml_entity_id: { + value: "urn:amazon:cognito:sp:${aws_cognito_user_pool.npk.id}" + } + } + (if !settings.useCustomDNS then { + saml_acs_url: { + value: "https://${random_string.saml_domain.result}.auth." + settings.primaryRegion + ".amazoncognito.com/saml2/idpresponse" + } + } else { + saml_acs_url: { + value: "https://" + settings.authEndpoint + "/saml2/idpresponse" + } + }) +} \ No newline at end of file diff --git a/jsonnet/cognito_iam_roles.libsonnet b/jsonnet/cognito_iam_roles.libsonnet new file mode 100644 index 0000000..35cbaef --- /dev/null +++ b/jsonnet/cognito_iam_roles.libsonnet @@ -0,0 +1,303 @@ +{ + resource: { + aws_iam_role: { + cognito_admins: { + name_prefix: "cognito_admin_role_", + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow", + "Principal": {"Federated": "cognito-identity.amazonaws.com"}, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": {"cognito-identity.amazonaws.com:aud": "${aws_cognito_identity_pool.main.id}"}, + "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"} + }}]}' + }, + cognito_authenticated: { + name_prefix: "cognito_authenticated_role_", + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow", + "Principal": {"Federated": "cognito-identity.amazonaws.com"}, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": {"cognito-identity.amazonaws.com:aud": "${aws_cognito_identity_pool.main.id}"}, + "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"} + }}]}' + }, + cognito_unauthenticated: { + name_prefix: "cognito_unauthenticated_role_", + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow", + "Principal": {"Federated": "cognito-identity.amazonaws.com"}, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": {"cognito-identity.amazonaws.com:aud": "${aws_cognito_identity_pool.main.id}"}, + "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"} + }}]}' + }, + }, + aws_iam_role_policy: { + cognito_admins: { + name_prefix: "cognito_admins_policy_", + role: "${aws_iam_role.cognito_admins.id}", + policy: "${data.aws_iam_policy_document.cognito_admins.json}" + }, + cognito_admins_baseline: { + name_prefix: "cognito_baseline_policy_", + role: "${aws_iam_role.cognito_admins.id}", + policy: "${data.aws_iam_policy_document.cognito_authenticated.json}" + }, + cognito_authenticated: { + name_prefix: "cognito_authenticated_policy_", + role: "${aws_iam_role.cognito_authenticated.id}", + policy: "${data.aws_iam_policy_document.cognito_authenticated.json}" + }, + cognito_unauthenticated: { + name_prefix: "cognito_authenticated_policy_", + role: "${aws_iam_role.cognito_unauthenticated.id}", + policy: "${data.aws_iam_policy_document.cognito_unauthenticated.json}" + } + }, + aws_cognito_identity_pool_roles_attachment: { + default: { + identity_pool_id: "${aws_cognito_identity_pool.main.id}", + roles: { + authenticated: "${aws_iam_role.cognito_authenticated.arn}", + unauthenticated: "${aws_iam_role.cognito_unauthenticated.arn}" + }, + + role_mapping: { + identity_provider: "${aws_cognito_user_pool.npk.endpoint}:${aws_cognito_user_pool_client.npk.id}", + ambiguous_role_resolution: "AuthenticatedRole", + type: "Rules", + + mapping_rule: [{ + claim: "cognito:groups", + match_type: "Contains", + value: "npk-admins", + role_arn: "${aws_iam_role.cognito_admins.arn}" + }] + } + } + } + }, + data(settings, apiName):: + local regionKeys = std.objectFields(settings.regions); + { + aws_iam_policy_document: { + cognito_admins: { + statement: [{ + sid: "adminSettings", + actions: [ + "dynamodb:PutItem", + ], + resources: [ + "${aws_dynamodb_table.settings.arn}" + ], + condition: [{ + test: "ForAllValues:StringEquals", + variable: "dynamodb:LeadingKeys", + + values: [ + "admin" + ] + }, { + test: "ForAllValues:StringEquals", + variable: "dynamodb:Attributes", + + values: [ + "userid", + "keyid", + "value", + ] + }] + }, { + sid: "events", + actions: [ + "dynamodb:Query", + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}/index/Events" + ] + }, { + sid: "s3Del", + actions: [ + "s3:DeleteObject", + ], + resources: [ + "${aws_s3_bucket.dictionary.arn}/wordlist/*", + "${aws_s3_bucket.dictionary.arn}/rules/*", + "${aws_s3_bucket.dictionary.arn}/to_process/*" + ] + }, { + sid: "s3Put", + actions: [ + "s3:PutObject", + ], + resources: [ + "${aws_s3_bucket.dictionary.arn}/to_process/*" + ] + }, { + sid: "cognitoAdmin", + actions: [ + "cognito-idp:AdminAddUserToGroup", + "cognito-idp:AdminCreateUser", + "cognito-idp:AdminDeleteUser", + "cognito-idp:AdminDisableUser", + "cognito-idp:AdminEnableUser", + "cognito-idp:AdminListUserAuthEvents", + "cognito-idp:AdminRemoveUserFromGroup", + "cognito-idp:AdminResetUserPassword", + "cognito-idp:ListUsers", + "cognito-idp:ListUsersInGroup" + ], + resources: [ + "${aws_cognito_user_pool.npk.arn}" + ] + }, { + sid: "cognitoIdentities", + actions: [ + "cognito-idp:ListIdentities", + "cognito-idp:DescribeIdentity", + ], + resources: [ + "${aws_cognito_identity_pool.main.arn}" + ] + }] + }, + cognito_authenticated: { + statement: [{ + sid: "1", + actions: [ + "cognito-identity:*", + "mobileanalytics:PutEvents", + "cognito-sync:*", + "ec2:describeSpotPriceHistory", + "pricing:*" + ], + resources: [ + "*" + ] + },{ + sid: "2", + actions: [ + "s3:PutObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/uploads/*" + ] + },{ + sid: "3", + actions: [ + "s3:GetObject", + "s3:ListObjectVersions", + "s3:DeleteObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}", + "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/*" + ] + },{ + sid: "4", + actions: [ + "s3:ListBucket" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}", + ], + condition: [{ + test: "StringLike", + variable: "s3:prefix", + + values: [ + "&{cognito-identity.amazonaws.com:sub}/", + "&{cognito-identity.amazonaws.com:sub}/*" + ] + }] + },{ + sid: "5", + actions: [ + "dynamodb:GetItem", + "dynamodb:BatchGetItem", + "dynamodb:Query" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}", + "${aws_dynamodb_table.settings.arn}" + ], + condition: [{ + test: "ForAllValues:StringEquals", + variable: "dynamodb:LeadingKeys", + + values: [ + "&{cognito-identity.amazonaws.com:sub}", + "admin" + ] + }] + },{ + sid: "settings", + actions: [ + "dynamodb:PutItem", + ], + resources: [ + //"${aws_dynamodb_table.campaigns.arn}", + "${aws_dynamodb_table.settings.arn}" + ], + condition: [{ + test: "ForAllValues:StringEquals", + variable: "dynamodb:LeadingKeys", + + values: [ + "&{cognito-identity.amazonaws.com:sub}" + ] + }, { + test: "ForAllValues:StringEquals", + variable: "dynamodb:Attributes", + + values: [ + "userid", + "keyid", + "value" + ] + }] + },{ + sid: "6", + actions: [ + "s3:ListBucket" + ], + resources: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}" + ] + },{ + sid: "7", + actions: [ + "s3:GetObject" + ], + resources: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/*" + ] + },{ + sid: "8", + actions: [ + "execute-api:Invoke" + ], + resources: [ + "${aws_api_gateway_deployment.%s.execution_arn}/*/userproxy/*" % apiName + ] + }] + }, + cognito_unauthenticated: { + statement: [{ + sid: "logs", + actions: [ + "cognito-identity:*", + "mobileanalytics:PutEvents", + "cognito-sync:*" + ], + resources: [ + "*" + ] + }] + } + } + } +} \ No newline at end of file diff --git a/terraform/jsonnet/data.libsonnet b/jsonnet/data.libsonnet similarity index 100% rename from terraform/jsonnet/data.libsonnet rename to jsonnet/data.libsonnet diff --git a/terraform/jsonnet/dynamodb.libsonnet b/jsonnet/dynamodb.libsonnet similarity index 100% rename from terraform/jsonnet/dynamodb.libsonnet rename to jsonnet/dynamodb.libsonnet diff --git a/terraform/jsonnet/dynamodb_settings.libsonnet b/jsonnet/dynamodb_settings.libsonnet similarity index 97% rename from terraform/jsonnet/dynamodb_settings.libsonnet rename to jsonnet/dynamodb_settings.libsonnet index 7a7f7cc..4ab9f43 100644 --- a/terraform/jsonnet/dynamodb_settings.libsonnet +++ b/jsonnet/dynamodb_settings.libsonnet @@ -14,7 +14,7 @@ "item": '{"userid": {"S": "admin"},"keyid": {"S": "setting:data_ttl"},"value": {"N": "${var.campaign_data_ttl}"}}' }, - "admin_favorites": { + "admin_favorites":: { "table_name": "${aws_dynamodb_table.settings.name}", "hash_key": "userid", "range_key": "keyid", diff --git a/terraform/jsonnet/ec2_iam_roles.libsonnet b/jsonnet/ec2_iam_roles.libsonnet similarity index 95% rename from terraform/jsonnet/ec2_iam_roles.libsonnet rename to jsonnet/ec2_iam_roles.libsonnet index b02c712..b8a5ecc 100644 --- a/terraform/jsonnet/ec2_iam_roles.libsonnet +++ b/jsonnet/ec2_iam_roles.libsonnet @@ -1,4 +1,4 @@ -{ +{ roles(apiName):: { "resource": { "aws_iam_instance_profile": { "npk_node": { @@ -100,6 +100,7 @@ ], "resources": [ "${aws_s3_bucket.user_data.arn}", + "arn:aws:s3:::ec2-amd-linux-drivers" ], "condition": { "test": "StringLike", @@ -114,10 +115,10 @@ "execute-api:Invoke" ], "resources": [ - "${aws_api_gateway_deployment.npk.execution_arn}/*/statusreport/*" + "${aws_api_gateway_deployment.%s.execution_arn}/*/statusreport/*" % apiName ] }] } } } -} \ No newline at end of file +}} \ No newline at end of file diff --git a/jsonnet/gpu_instance_families.json b/jsonnet/gpu_instance_families.json new file mode 100644 index 0000000..d8592bf --- /dev/null +++ b/jsonnet/gpu_instance_families.json @@ -0,0 +1,74 @@ +{ + "NVIDIA M60": { + "quotaCode": "L-3819A6DF", + "instances": { + "g3s.xlarge": [1, 4], + "g3.4xlarge": [1, 16], + "g3.8xlarge": [2, 32], + "g3.16xlarge": [4, 64] + } + }, + "NVIDIA T4": { + "quotaCode": "L-3819A6DF", + "instances": { + "g4dn.xlarge": [1, 4], + "g4dn.12xlarge": [4, 48], + "g4dn.metal": [8, 96] + } + }, + "NVIDIA K80": { + "ami": "amzn2-ami-graphics-hvm-2*", + "owner": "679593333241", + "quotaCode": "L-7212CCBC", + "instances": { + "p2.xlarge": [1, 4], + "p2.8xlarge": [8, 32], + "p2.16xlarge": [16, 64] + } + }, + "NVIDIA V100": { + "ami": "amzn2-ami-graphics-hvm-2*", + "owner": "679593333241", + "quotaCode": "L-7212CCBC", + "instances": { + "p3.2xlarge": [1, 8], + "p3.8xlarge": [4, 32], + "p3.16xlarge": [8, 64] + } + }, + "NVIDIA A100": { + "quotaCode": "L-7212CCBC", + "instances": { + "p4d.24xlarge": [8, 96] + } + }, + "NVIDIA A10G": { + "quotaCode": "L-3819A6DF", + "instances": { + "g5.xlarge": [1, 4], + "g5.12xlarge": [4, 96], + "g5.48xlarge": [8, 192] + } + + }, + "NVIDIA T4G": { + "architecture": "arm64", + "ami": "aws-parallelcluster-*-ubuntu-*", + "owner": "247102896272", + "quotaCode": "L-3819A6DF", + "instances": { + "g5g.xlarge": [1, 4], + "g5g.metal": [2, 64] + } + }, + "Radeon Pro V520": { + "ami": "amzn2-ami-amd-hvm-*-x86_64-*", + "owner": "679593333241", + "quotaCode": "L-3819A6DF", + "instances": { + "g4ad.xlarge": [1, 16], + "g4ad.8xlarge": [2, 32], + "g4ad.16xlarge": [4, 64] + } + } +} \ No newline at end of file diff --git a/jsonnet/iam.libsonnet b/jsonnet/iam.libsonnet new file mode 100644 index 0000000..e406707 --- /dev/null +++ b/jsonnet/iam.libsonnet @@ -0,0 +1,40 @@ +// name: The name of the IAM role +// policy_attachments: an object as { "name": } to attach to the role +// inline_policies: an objects as { "name": } to attach inline. +// trust_policy: a raw trust policy string or 'statements' array. + + +local iam_role(name, description, policy_attachments, inline_policies, trust_policy) = std.prune({ + aws_iam_role: { + [name]: { + name: name, + description: description, + assume_role_policy: if std.isArray(trust_policy) then std.manifestJsonEx({ + Version: "2012-10-17", + Statement: trust_policy + }, " ") else trust_policy, + } + }, + aws_iam_role_policy_attachment: { + [name + "-" + i]: { + role: "${aws_iam_role." + name + ".id}", + policy_arn: policy_attachments[i] + } + for i in std.objectFields(policy_attachments) + }, + aws_iam_role_policy: { + [name + "-" + i]: { + name: i, + role: "${aws_iam_role." + name + ".id}", + policy: if std.isArray(inline_policies[i]) then std.manifestJsonEx({ + Version: "2012-10-17", + Statement: inline_policies[i] + }, " ") else inline_policies[i] + } + for i in std.objectFields(inline_policies) + } +}); + +{ + iam_role: iam_role +} \ No newline at end of file diff --git a/terraform/jsonnet/igw.libsonnet b/jsonnet/igw.libsonnet similarity index 100% rename from terraform/jsonnet/igw.libsonnet rename to jsonnet/igw.libsonnet diff --git a/terraform/jsonnet/keepers.libsonnet b/jsonnet/keepers.libsonnet similarity index 100% rename from terraform/jsonnet/keepers.libsonnet rename to jsonnet/keepers.libsonnet diff --git a/jsonnet/lambda.libsonnet b/jsonnet/lambda.libsonnet new file mode 100644 index 0000000..4e0a9fc --- /dev/null +++ b/jsonnet/lambda.libsonnet @@ -0,0 +1,139 @@ +local sonnetry = import 'sonnetry'; + +local lambda_function(name, config, role_policy) = { + resource: { + aws_lambda_function: { + [name]: config + { + function_name: name, + filename: "%s/lambda_functions/zip_files/%s.zip" % [sonnetry.path(), name], + source_code_hash: "${data.archive_file." + name + ".output_base64sha256}", + runtime: "nodejs18.x", + role: "${aws_iam_role.lambda-" + name + ".arn}", + depends_on: ["data.archive_file." + name, "aws_iam_role_policy.lambda-" + name], + } + }, + null_resource: { + ["npm_install-" + name]: { + provisioner: [{ + "local-exec": { + command: "cd %s/lambda_functions/%s/ && npm install" % [sonnetry.path(), name], + } + }], + + triggers: { + always: "${timestamp()}" + } + } + }, + aws_iam_role: { + ["lambda-" + name]: { + name: "lambda_" + name, + description: "Lambda Role for " + name, + assume_role_policy: '{"Version": "2012-10-17","Statement": [{ + "Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com"]}, + "Action": "sts:AssumeRole" + }]}' + } + }, + aws_iam_role_policy: { + ["lambda-" + name]: { + name: "lambda_" + name, + role: "${aws_iam_role.lambda-" + name + ".id}", + + policy: "${data.aws_iam_policy_document.lambda-" + name + ".json}", + } + }, + aws_iam_policy_attachment:: { + ["lambda-" + name + "-xray"]: { + name: "lambda-" + name + "-xray", + roles: ["${aws_iam_role.lambda-" + name + ".id}"], + + policy_arn: "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess" + } + }, + local_file: { + ["lambda-" + name + "_envvars"]: { + content: std.join("\n", [ + "declare %s='%s'\nexport %s" % [key, config.environment.variables[key], key] + for key in std.objectFields(config.environment.variables) + ]), + filename: "%s/lambda_functions/%s/ENVVARS" % [sonnetry.path(), name], + file_permission: "0664" + } + } + }, + data: { + archive_file: { + [name]: { + depends_on: [ + "null_resource.npm_install-" + name + ] + if std.objectHas(config, 'depends_on') then config.depends_on else [], + type: "zip", + source_dir: "%s/lambda_functions/%s/" % [sonnetry.path(), name], + output_path: "%s/lambda_functions/zip_files/%s.zip" % [sonnetry.path(), name], + } + }, + aws_iam_policy_document: { + ["lambda-" + name]: { + statement: std.flattenArrays([ + role_policy.statement, + [{ + sid: "logs", + actions: [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents", + ], + resources: [ + "arn:aws:logs:*:*:*" + ] + }, { + sid: "xray", + actions: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + "xray:GetSamplingStatisticSummaries" + ], + resources: [ + "*" + ] + }] + ]) + } + } + } +}; + +local cloudwatch_trigger(name, schedule_expression) = { + resource: { + aws_lambda_permission: { + [name]: { + statement_id: "AllowExecutionFromCloudWatch", + action: "lambda:InvokeFunction", + function_name: "${aws_lambda_function." + name + ".function_name}", + principal: "events.amazonaws.com", + source_arn: "${aws_cloudwatch_event_rule." + name + ".arn}" + } + }, + aws_cloudwatch_event_rule: { + [name]: { + name: name, + schedule_expression: schedule_expression + } + }, + aws_cloudwatch_event_target: { + [name]: { + rule: name, + target_id: name, + arn: "${aws_lambda_function." + name + ".arn}" + } + } + } +}; + +{ + lambda_function: lambda_function, + cloudwatch_trigger: cloudwatch_trigger +} \ No newline at end of file diff --git a/terraform/jsonnet/null_resources.libsonnet b/jsonnet/null_resources.libsonnet similarity index 59% rename from terraform/jsonnet/null_resources.libsonnet rename to jsonnet/null_resources.libsonnet index cd4f2d7..66e7823 100644 --- a/terraform/jsonnet/null_resources.libsonnet +++ b/jsonnet/null_resources.libsonnet @@ -5,7 +5,7 @@ "s3-sync-static-content": { "provisioner": [{ "local-exec": { - "command": "aws --profile " + settings.awsProfile + " s3 --region " + settings.defaultRegion + " sync ${path.module}/../site-content/ s3://${aws_s3_bucket.static_site.id}" + "command": "aws --region %s s3 sync ${path.module}/../site-content/ s3://${aws_s3_bucket.static_site.id}" % [settings.primaryRegion] } }], @@ -18,7 +18,7 @@ "cognito-add-to-admin-group": { "provisioner": [{ "local-exec": { - "command": "aws --region " + settings.defaultRegion + " --profile " + settings.awsProfile + " cognito-idp admin-add-user-to-group --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --group npk-admins" + "command": "aws --region %s cognito-idp admin-add-user-to-group --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --group npk-admins" % [settings.primaryRegion] } }], diff --git a/terraform/jsonnet/provider.libsonnet b/jsonnet/provider.libsonnet similarity index 100% rename from terraform/jsonnet/provider.libsonnet rename to jsonnet/provider.libsonnet diff --git a/terraform/jsonnet/route53.libsonnet b/jsonnet/route53.libsonnet similarity index 100% rename from terraform/jsonnet/route53.libsonnet rename to jsonnet/route53.libsonnet diff --git a/terraform/jsonnet/routetable.libsonnet b/jsonnet/routetable.libsonnet similarity index 60% rename from terraform/jsonnet/routetable.libsonnet rename to jsonnet/routetable.libsonnet index de133df..6ca0f37 100644 --- a/terraform/jsonnet/routetable.libsonnet +++ b/jsonnet/routetable.libsonnet @@ -1,10 +1,21 @@ local routetable(region) = { provider: "aws." + region, vpc_id: "${aws_vpc." + region + ".id}", - route: { + route: [{ cidr_block: "0.0.0.0/0", - gateway_id: "${aws_internet_gateway." + region + ".id}" - } + gateway_id: "${aws_internet_gateway." + region + ".id}", + egress_only_gateway_id: "", + instance_id: "", + ipv6_cidr_block: "", + local_gateway_id: "", + nat_gateway_id: "", + network_interface_id: "", + transit_gateway_id: "", + vpc_peering_connection_id: "", + carrier_gateway_id: "", + destination_prefix_list_id: "", + vpc_endpoint_id: "" + }] }; local endpoint(region, endpoint) = { diff --git a/terraform/jsonnet/s3.libsonnet b/jsonnet/s3.libsonnet similarity index 65% rename from terraform/jsonnet/s3.libsonnet rename to jsonnet/s3.libsonnet index 1263b26..65dc2ec 100644 --- a/terraform/jsonnet/s3.libsonnet +++ b/jsonnet/s3.libsonnet @@ -2,15 +2,15 @@ local cors_rule(origin) = { "allowed_headers": ["*"], "allowed_methods": ["GET", "HEAD", "PUT", "POST", "DELETE"], "allowed_origins": [origin], - "expose_headers": ["x-amz-meta-lines", "x-amz-meta-size", "x-amz-meta-type", "content-length"], + "expose_headers": ["x-amz-meta-lines", "x-amz-meta-size", "x-amz-meta-type", "content-length", "ETag"], "max_age_seconds": 3000 }; local bucket(name, cors=null) = if std.type(cors) == "null" then - { "bucket_prefix": name, "force_destroy": true, "acl": "private" } + { "bucket_prefix": name, "force_destroy": true} else - { "bucket_prefix": name, "force_destroy": true, "acl": "private", "cors_rule": cors }; + { "bucket_prefix": name, "force_destroy": true, "cors_rule": cors }; { "cors_rule": cors_rule, diff --git a/terraform/jsonnet/subnet.libsonnet b/jsonnet/subnet.libsonnet similarity index 100% rename from terraform/jsonnet/subnet.libsonnet rename to jsonnet/subnet.libsonnet diff --git a/jsonnet/templates.libsonnet b/jsonnet/templates.libsonnet new file mode 100644 index 0000000..006a6a8 --- /dev/null +++ b/jsonnet/templates.libsonnet @@ -0,0 +1,5 @@ +local az(region) = { + [az]: "${" + az + "}" + for az in region +}; + diff --git a/jsonnet/variables.libsonnet b/jsonnet/variables.libsonnet new file mode 100644 index 0000000..6883d83 --- /dev/null +++ b/jsonnet/variables.libsonnet @@ -0,0 +1,12 @@ +{ + variables(settings):: + local regionKeys = std.objectFields(settings.regions); + { + campaign_max_price: {}, + campaign_data_ttl: {}, + cognito_user_mfa: { + default: "OFF" + }, + useSAML: {}, + } +} \ No newline at end of file diff --git a/jsonnet/vpc.libsonnet b/jsonnet/vpc.libsonnet new file mode 100644 index 0000000..51f0569 --- /dev/null +++ b/jsonnet/vpc.libsonnet @@ -0,0 +1,187 @@ +{ + base_vpc(basename, region, cidr, azs, baseendpoints):: { + + // Overload the name for scalability. + local name = "%s-%s" % [basename, region], + local provider = "aws.%s" % [region], + local vpc_id = "${aws_vpc.%s.id}" % [name], + + // Since Jsonnet doesn't have a log2(), we need to do some hackery. + // This only works up to 17, but that should be more than plenty. + local log2map = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5], + local segments = log2map[std.length(azs)], + + local gatewayEndpoints = ["s3", "dynamodb"], + + // Interpolate a single '%s' as region. + local endpointName(endpoint) = [std.strReplace(endpoint, ".", "-"), 'com.amazonaws.%s.%s' % [region, endpoint]], + + // Interpolate all services now. + local endpoints = std.map(endpointName, baseendpoints), + + resource: { + aws_vpc: { + [name]: { + provider: provider, + cidr_block: cidr, + enable_dns_support: true, + enable_dns_hostnames: true, + + tags: { + Name: name + } + } + }, + aws_subnet: { + ["%s-subnet-%s" % [name, azs[i]]]: { + provider: provider, + cidr_block: "${cidrsubnet(aws_vpc.%s.cidr_block, %d, %d)}" % [name, segments, i], + availability_zone: azs[i], + vpc_id: vpc_id, + + tags: { + Name: "%s-subnet-%s" % [name, azs[i]] + } + } + for i in std.range(0, std.length(azs) - 1) + }, + aws_route_table: { + [name]: { + provider: provider, + vpc_id: vpc_id, + + tags: { + Name: name + } + } + }, + aws_main_route_table_association: { + [name]: { + provider: provider, + vpc_id: vpc_id, + route_table_id: "${aws_route_table.%s.id}" % [name] + } + }, + aws_route_table_association: { + + ["%s-%s" % [name, azName]]: { + local subnetName = "%s-subnet-%s" % [name, azName], + + provider: provider, + route_table_id: "${aws_route_table.%s.id}" % [name], + subnet_id: "${aws_subnet.%s.id}" % [subnetName] + } + for azName in azs + }, + aws_security_group: { + ["%s-default" % name]: { + provider: provider, + name: "%s-default" % name, + vpc_id: vpc_id, + + ingress: [{ + description: "Allow same group.", + from_port: 0, + to_port: 0, + protocol: "-1", + cidr_blocks: [], + 'self': true, + prefix_list_ids: [], + security_groups: [], + ipv6_cidr_blocks: [] + }], + + egress: [{ + description: "Allow internet acces", + protocol: "-1", + from_port: 0, + to_port: 0, + cidr_blocks: ["0.0.0.0/0"], + 'self': false, + prefix_list_ids: [], + security_groups: [], + ipv6_cidr_blocks: [] + }] + } + } + } + std.prune({ + aws_vpc_endpoint: { + ["%s-%s" % [name, endpoint[0]]]: { + provider: provider, + service_name: endpoint[1], + vpc_id: vpc_id, + + [if std.member(gatewayEndpoints, endpoint[0]) then null else 'vpc_endpoint_type']: "Interface", + [if std.member(gatewayEndpoints, endpoint[0]) then null else 'private_dns_enabled']: true, + [if std.member(gatewayEndpoints, endpoint[0]) then null else 'security_group_ids']: [ + "${aws_security_group.%s-default.id}" % name + ], + + tags: { + Name: "%s-%s" % [name, endpoint[1]] + } + } + for endpoint in endpoints + }, + aws_vpc_endpoint_subnet_association: { + [if std.member(gatewayEndpoints, endpoint[0]) then null else "%s-%s-%s" % [name, endpoint[0], i]]: { + local vpceName = "%s-%s" % [name, endpoint[0]], + local subnetName = "%s-subnet-%s" % [name, azs[i]], + + provider: provider, + subnet_id: "${aws_subnet.%s.id}" % [subnetName], + vpc_endpoint_id: "${aws_vpc_endpoint.%s.id}" % [vpceName] + } + for endpoint in endpoints + for i in std.range(0, std.length(azs) - 1) + }, + aws_vpc_endpoint_route_table_association: { + [if std.member(gatewayEndpoints, endpoint[0]) then "%s-%s" % [name, endpoint[0]] else null]: { + local vpceName = "%s-%s" % [name, endpoint[0]], + + provider: provider, + route_table_id: "${aws_route_table.%s.id}" % [name], + vpc_endpoint_id: "${aws_vpc_endpoint.%s.id}" % [vpceName] + } + for endpoint in endpoints + } + }) + }, + public_vpc(basename, region, cidr, azs, baseendpoints):: $.base_vpc(basename, region, cidr, azs, baseendpoints) + { + // Overload the name for scalability. + local name = "%s-%s" % [basename, region], + local provider = "aws.%s" % [region], + local vpc_id = "${aws_vpc.%s.id}" % [name], + + // Interpolate a single '%s' as region. + local endpointName(endpoint) = + if (std.length(std.findSubstr('%s')) == 1) then + endpoint % [region] + else + endpoint, + + // Interpolate all services now. + local endpoints = std.map(endpointName, baseendpoints), + + resource+: { + aws_route+: { + ["%s-igw" % [name]]: { + provider: provider, + route_table_id: "${aws_route_table.%s.id}" % [name], + destination_cidr_block: "0.0.0.0/0", + gateway_id: "${aws_internet_gateway.%s.id}" % [name] + } + }, + aws_internet_gateway+: { + [name]: { + provider: provider, + vpc_id: vpc_id, + + tags: { + Name: name + } + } + } + } + } +} \ No newline at end of file diff --git a/lambda_functions/compression_pipe/main.js b/lambda_functions/compression_pipe/main.js new file mode 100644 index 0000000..1535543 --- /dev/null +++ b/lambda_functions/compression_pipe/main.js @@ -0,0 +1,310 @@ +'use strict'; + +const fs = require('fs'); +const aws = require('aws-sdk'); +const zlib = require('zlib'); +const util = require('util'); +const stream = require('stream'); + +const accountDetails = JSON.parse(fs.readFileSync('./accountDetails.json', 'ascii')); + +const variables = JSON.parse(JSON.stringify(process.env)); +variables.subnets = JSON.parse(variables.subnets); + +const pipe = util.promisify(stream.pipeline); + +function uploadStream(Bucket, Key, s3) { + + const passthrough = new stream.PassThrough(); + + return { + writeStream: passthrough, + s3Promise: s3.upload({ Bucket, Key, Body: passthrough }).promise() + } +} + +exports.main = async function(event, context, callback) { + console.log(JSON.stringify(event)); + + event = event.Records?.[0]; + + if (!event) { + return callback('[!] Invalid event received.'); + } + + const s3 = new aws.S3({ region: event.awsRegion }); + const bucket = event.s3.bucket.name; + const keysize = event.s3.object.size; + const key = event.s3.object.key; + + if (keysize > 1500 * Math.pow(1024, 3)) { + console.log("[!] Max file size is 2.5TiB."); + return false; + } + + // Get the filename. #sorrynotsorry. + const basename = key + .split('/') + .pop() + .split('.') + .slice(0, -1) + .join('.') + .toString(); + + const type = key + .split('/') + .slice(-2, -1) + .toString(); + + const extension = key + .split('.') + .slice(-1)[0]; + + let newKey = `${type}/${basename}.gz`; + + if (!['rules', 'wordlist'].includes(type)) { + await s3.deleteObject({ + Bucket: bucket, + Key: key + }).promise(); + + return callback(`[!] '${type}' is not a valid type.`); + } + + // Append a timestamp if the file already exists. + try { + const exists = await s3.headObject({ + Bucket: bucket, + Key: newKey + }).promise(); + + newKey = `${type}/${basename}-${Date.now()}.gz` + } catch (e) { + // all good. + } + + // Use EC2 for compression if the size is over 4GB: + if (keysize > 4 * Math.pow(1024, 3)) { + const sq = new aws.ServiceQuotas({ region: event.awsRegion }); + const ec2 = new aws.EC2({ region: event.awsRegion }); + + let instanceType = "i3en.2xlarge"; + const i3Quota = await sq.getServiceQuota({ + ServiceCode: 'ec2', + QuotaCode: 'L-34B43A08' + }).promise() + + // console.log(i3Quota.Quota); + + if (i3Quota.Quota.Value < 4) { + console.log("[!] Insufficient quota."); + return false; + } + + if (i3Quota.Quota.Value < 8) { + if (keysize > 1500 * Math.pow(1024, 3)) { + console.log("[!] Your limited quota limits your max file size to 1.5TiB."); + return false; + } + + console.log("[-] Using smaller instance due to quota limitations."); + instanceType = "i3en.2xlarge"; + } + + // Build a launchSpecification for each AZ in the target region. + const instance_userdata = new Buffer.from(fs.readFileSync(__dirname + '/userdata.sh', 'utf-8') + .replace("{{targetfile}}", `s3://${bucket}/${key}`) + .replace("{{targetfiletype}}", type) + .replace("{{dictionarybucket}}", variables.dictionaryBucket)) + .toString('base64'); + + const images = await ec2.describeImages({ + Filters: [{ + Name: "virtualization-type", + Values: ["hvm"] + }, { + Name: "root-device-type", + Values: ["ebs"] + }, { + Name: "architecture", + Values: ["x86_64"] + }, { + Name: "owner-id", + Values: ["137112412989"] + }, { + Name: "name", + Values: ["amzn2-ami-hvm-2.0.20*"] + }] + }).promise() + + const image = images.Images.reduce((newest, entry) => + entry.CreationDate > newest.CreationDate ? entry : newest + , { CreationDate: '1980-01-01T00:00:00.000Z' }); + + if (!!!image.ImageId) { + console.log("Unable to find a suitable AMI."); + return false; + } + + const launchSpecificationTemplate = { + ImageId: image.ImageId, + KeyName: "npk-key", + InstanceType: instanceType, + NetworkInterfaces: [{ + DeviceIndex: 0, + DeleteOnTermination: true, + AssociatePublicIpAddress: true + }], + IamInstanceProfile: { + Arn: variables.compressionProfile + }, + TagSpecifications: [{ + ResourceType: "instance", + Tags: [{ + Key: "TargetFile", + Value: newKey + }] + }], + UserData: instance_userdata + } + + // Create a copy of the launchSpecificationTemplate for each AvailabilityZone in the campaign's region. + const launchSpecifications = Object.keys(variables.subnets).reduce((specs, entry) => { + const az = JSON.parse(JSON.stringify(launchSpecificationTemplate)); // Have to deep-copy to avoid referential overrides. + + az.NetworkInterfaces[0].SubnetId = variables.subnets[entry]; + + return specs.concat(az); + }, []); + + const spotFleetParams = { + SpotFleetRequestConfig: { + AllocationStrategy: "lowestPrice", + IamFleetRole: variables.iamFleetRole, + InstanceInterruptionBehavior: "terminate", + LaunchSpecifications: launchSpecifications, + SpotPrice: "0.90", + TargetCapacity: 1, + ReplaceUnhealthyInstances: false, + TerminateInstancesWithExpiration: true, + Type: "request", + ValidFrom: (new Date().getTime() / 1000), + ValidUntil: (new Date().getTime() / 1000) + (4 * 3600) + } + }; + + const sfr = await ec2.requestSpotFleet(spotFleetParams).promise(); + + console.log(`[+] Successfully requested Spot fleet [ ${sfr.SpotFleetRequestId} ]`); + + return true; + } + + const raw = s3.getObject({ + Bucket: bucket, + Key: key + }).createReadStream(); + + let size = 0; + let lines = 0; + let time = Date.now(); + const lineCounter = new stream.Transform({ + transform(chunk, encoding, callback) { + if (size == 0) { + console.log(`[*] TTFT: ${(Date.now() - time)}ms`); + time = Date.now(); + } + + size += chunk.length; + lines += (Buffer.from(chunk, encoding).toString().match(/\n/g) || []).length; + callback(null, chunk) + } + }); + + console.log(`[*] Found extension [${extension}]`); + + if (extension == "gz") { + console.log(`[*] Treating as gzip`); + + const gunzip = zlib.createGunzip(); + const devnull = fs.createWriteStream('/dev/null'); + + await pipe(raw, gunzip, lineCounter, devnull).catch(async e => { + await s3.deleteObject({ + Bucket: bucket, + Key: key + }).promise(); + + return callback(e); + }); + + const lapsed = (Date.now() - time) / 1000; + console.log(`[*] Stream unzipped ${Math.round(size / 1024)}KB in ${lapsed} seconds; ${Math.round(size / lapsed / 1024)}KB/s`); + + console.log(lapsed, size, size / lapsed, lines); + + await s3.copyObject({ + Bucket: bucket, + CopySource: `/${bucket}/${key}`, + Key: newKey, + Metadata: { + type, + lines: lines.toString(), + size: size.toString() + }, + MetadataDirective: 'REPLACE' + }).promise(); + + } else { + + const gzip = zlib.createGzip(); + const { writeStream, s3Promise } = uploadStream(bucket, newKey, s3); + + await pipe(raw, lineCounter, gzip, writeStream).catch(async e => { + await s3.deleteObject({ + Bucket: bucket, + Key: key + }).promise(); + + return callback(e); + }); + + await s3Promise; + + const lapsed = (Date.now() - time) / 1000; + console.log(`[*] Stream zipped ${Math.round(size / 1024)}KB in ${lapsed} seconds; ${Math.round(size / lapsed / 1024)}KB/s`); + + console.log(lapsed, size, size / lapsed, lines); + + await s3.copyObject({ + Bucket: bucket, + CopySource: `/${bucket}/${newKey}`, + Key: newKey, + Metadata: { + type, + lines: lines.toString(), + size: size.toString() + }, + MetadataDirective: 'REPLACE' + }).promise(); + + if (size == 0 || lines == 0) { + await s3.deleteObject({ + Bucket: bucket, + Key: newKey + }).promise(); + + return callback(`[!] File has no linebreaks or a length of 0. Removing it.`); + } + } + + await s3.deleteObject({ + Bucket: bucket, + Key: key + }).promise(); + + const used = process.memoryUsage().heapUsed / 1024 / 1024; + console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`); + + return callback(null, 'Done.'); +} \ No newline at end of file diff --git a/lambda_functions/compression_pipe/package-lock.json b/lambda_functions/compression_pipe/package-lock.json new file mode 100644 index 0000000..bce9f5e --- /dev/null +++ b/lambda_functions/compression_pipe/package-lock.json @@ -0,0 +1,750 @@ +{ + "name": "compression_pipe", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "compression_pipe", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "aws-sdk": "^2.1562.0", + "base64-js": "^1.5.1", + "buffer": "^4.9.2", + "call-bind": "^1.0.7", + "define-data-property": "^1.1.4", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "events": "^1.1.1", + "for-each": "^0.3.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1", + "ieee754": "^1.1.13", + "inherits": "^2.0.4", + "is-arguments": "^1.1.1", + "is-callable": "^1.2.7", + "is-generator-function": "^1.0.10", + "is-typed-array": "^1.1.13", + "isarray": "^1.0.0", + "jmespath": "^0.16.0", + "possible-typed-array-names": "^1.0.0", + "punycode": "^1.3.2", + "querystring": "^0.2.0", + "sax": "^1.2.1", + "set-function-length": "^1.2.1", + "url": "^0.10.3", + "util": "^0.12.5", + "uuid": "^8.0.0", + "which-typed-array": "^1.1.14", + "xml2js": "^0.6.2", + "xmlbuilder": "^11.0.1" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1562.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1562.0.tgz", + "integrity": "sha512-HsdlDRfVamH4tv+M+d0lnEYdtx+yEpqWA4T2XuJCjtV5JjjHDUQTKm+9C+EoTxLWtuw+SYSVWyuclwETv6CmHQ==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "aws-sdk": { + "version": "2.1562.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1562.0.tgz", + "integrity": "sha512-HsdlDRfVamH4tv+M+d0lnEYdtx+yEpqWA4T2XuJCjtV5JjjHDUQTKm+9C+EoTxLWtuw+SYSVWyuclwETv6CmHQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "requires": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + }, + "which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "requires": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + } + }, + "xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } +} diff --git a/lambda_functions/compression_pipe/package.json b/lambda_functions/compression_pipe/package.json new file mode 100644 index 0000000..0b7ed1f --- /dev/null +++ b/lambda_functions/compression_pipe/package.json @@ -0,0 +1,50 @@ +{ + "name": "compression_pipe", + "version": "1.0.0", + "description": "", + "main": "main.js", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "aws-sdk": "^2.1562.0", + "base64-js": "^1.5.1", + "buffer": "^4.9.2", + "call-bind": "^1.0.7", + "define-data-property": "^1.1.4", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "events": "^1.1.1", + "for-each": "^0.3.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1", + "ieee754": "^1.1.13", + "inherits": "^2.0.4", + "is-arguments": "^1.1.1", + "is-callable": "^1.2.7", + "is-generator-function": "^1.0.10", + "is-typed-array": "^1.1.13", + "isarray": "^1.0.0", + "jmespath": "^0.16.0", + "possible-typed-array-names": "^1.0.0", + "punycode": "^1.3.2", + "querystring": "^0.2.0", + "sax": "^1.2.1", + "set-function-length": "^1.2.1", + "url": "^0.10.3", + "util": "^0.12.5", + "uuid": "^8.0.0", + "which-typed-array": "^1.1.14", + "xml2js": "^0.6.2", + "xmlbuilder": "^11.0.1" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/lambda_functions/compression_pipe/userdata.sh b/lambda_functions/compression_pipe/userdata.sh new file mode 100644 index 0000000..bd5c7a9 --- /dev/null +++ b/lambda_functions/compression_pipe/userdata.sh @@ -0,0 +1,66 @@ +#! /bin/bash -xe + +amazon-linux-extras install -y epel +yum install -y wget p7zip + +mkfs.ext4 /dev/nvme1n1 + +if [[ -e /dev/nvme2n1 ]]; then + mkfs.ext4 /dev/nvme2n1 + mkdir -p /npk/raw + mkdir /npk/compressed + + mount /dev/nvme1n1 /npk/raw + mount /dev/nvme2n1 /npk/compressed +else + mkdir /npk + mount /dev/nvme1n1 /npk + + mkdir /npk/{raw,compressed} +fi + +export AWS_DEFAULT_REGION=`wget -qO- http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'` +export AWS_DEFAULT_OUTPUT=json + +export TARGETFILE={{targetfile}} +export TARGETFILETYPE={{targetfiletype}} +if [[ `echo $TARGETFILE | grep s3: | wc -l` -gt 0 ]]; then + aws s3 cp $TARGETFILE /npk/raw/rawfile +else + wget $targetfile -O /npk/raw/rawfile +fi + +ls -alh /npk/raw/rawfile +FILETYPE=`file -b /npk/raw/rawfile` +FILENAME=`echo ${TARGETFILE##*/} | cut -d"?" -f1` + +if [[ `echo $FILETYPE | grep text | wc -l` -eq 0 ]]; then + echo "[+] File is compressed. Attempting to decompress" + 7za l /npk/raw/rawfile + + mv /npk/raw/rawfile /npk/raw/cprfile + FIRSTFILE=`7za l /npk/raw/cprfile | tail -n 3 | head -n 1 | awk ' { print($6) } '` + FILENAME=${FIRSTFILE##*/} + 7za x /npk/raw/cprfile -o/npk/raw/output/ + # rm -f /npk/raw/cprfile + mv /npk/raw/output/$FILENAME /npk/raw/rawfile +fi + +FILELINES=$(wc -l /npk/raw/rawfile | cut -d" " -f1) +SIZE=$(ls -al /npk/raw/rawfile | cut -d" " -f5) + +# echo "Compressing with 7z" +# 7za a /npk/compressed/$FILENAME.7z /npk/raw/rawfile + +echo "Compressing with gzip" +gzip -c /npk/raw/rawfile > /npk/compressed/$FILENAME.gz + +echo "$FILENAME has $FILELINES lines and $SIZE bytes. Preparing to upload as $TARGETFILETYPE." + +aws s3 cp /npk/compressed/$FILENAME.gz s3://{{dictionarybucket}}/$TARGETFILETYPE/$FILENAME.gz --metadata type=$TARGETFILETYPE,lines=$FILELINES,size=$SIZE + +if [[ `echo $TARGETFILE | grep s3: | wc -l` -gt 0 ]]; then + aws s3 rm $TARGETFILE +fi + +poweroff \ No newline at end of file diff --git a/lambda_functions/create_campaign/main.js b/lambda_functions/create_campaign/main.js new file mode 100644 index 0000000..8a89ff1 --- /dev/null +++ b/lambda_functions/create_campaign/main.js @@ -0,0 +1,530 @@ +'use strict'; + +const fs = require('fs'); +const aws = require('aws-sdk'); +const uuid = require('uuid/v4'); + +const accountDetails = JSON.parse(fs.readFileSync('./accountDetails.json', 'ascii')); +const vcpus = Object.keys(accountDetails.families).reduce((acc, curr) => { + Object.keys(accountDetails.families[curr].instances).forEach((instance) => { + acc[instance] = accountDetails.families[curr].instances[instance]; + }); + + return acc; +}, {}); + +const ddb = new aws.DynamoDB({ region: accountDetails.primaryRegion }); +const s3 = new aws.S3({ region: accountDetails.primaryRegion }); + +const cognito = new aws.CognitoIdentityServiceProvider({region: accountDetails.primaryRegion, apiVersion: "2016-04-18"}); + +let cb = ""; +let origin = ""; +let variables = {}; + +var allowed_regions = Object.keys(accountDetails.quotas); + +exports.main = async function(event, context, callback) { + + console.log(JSON.stringify(event)); + + // Hand off the callback function for later. + cb = callback; + + // Get the available envvars into a usable format. + variables = JSON.parse(JSON.stringify(process.env)); + + let entity, campaign, UserPoolId, sub; + + try { + + console.log("Received event: " + JSON.stringify(event)); + + // Hand off the origin, too. Fix for weird case + origin = event?.headers?.origin ?? event?.headers?.Origin; + + var allowed_characters = /^[a-zA-Z0-9'"%\.\[\]\{\}\(\)\-\:\\\/\;\=\?\#\_+\s,!@#\$\^\*&]+$/; + if (!allowed_characters.test(JSON.stringify(event))) { + console.log("Request contains illegal characters"); + return respond(400, {}, "Request contains illegal characters", false); + } + + if (event?.requestContext?.identity?.cognitoAuthenticationType != "authenticated") { + console.log(`cognitoAuthenticationType ${event?.requestContext?.identity?.cognitoAuthenticationType} != "authenticated"`) + return respond(401, {}, "Authentication Required", false); + } + + entity = event.requestContext.identity.cognitoIdentityId; + + let body = {}; + // Unencode the body if necessary + if (!!event?.body) { + body = (event.requestContext.isBase64Encoded) ? atob(event.body) : event.body; + + // Body will always be a JSON object. + try { + body = JSON.parse(body); + } catch (e) { + return respond(400, {}, "Body must be JSON object", false); + } + } + + campaign = body; + + // Associate the user identity. + if (!!event?.requestContext?.identity?.cognitoAuthenticationProvider?.split('/')[2]) { + [ UserPoolId,, sub ] = event?.requestContext?.identity?.cognitoAuthenticationProvider?.split('/')[2]?.split(':'); + } + + if (!UserPoolId || !sub) { + console.log(`UserPoolId or sub is missing from ${event?.requestContext?.identity?.cognitoAuthenticationProvider}`); + return respond(401, {}, "Authorization Required", false); + } + + } catch (e) { + console.log("Failed to process request.", e); + return respond(500, {}, "Failed to process request.", false); + } + + let user, email, Username; + + try { + // Get the user based on 'sub'. This is needed when the IdP isn't Cognito itself. + let userList = await cognito.listUsers({ UserPoolId, Filter: `sub = "${sub}"` }).promise(); + + if (!userList.Users?.[0]?.Username) { + console.log("Unable to find Cognito user from Subscriber ID.", e); + return respond(500, {}, "Unable to find Cognito user from Subscriber ID.", false); + } + + Username = userList.Users[0].Username; + + user = await cognito.adminGetUser({ UserPoolId, Username }).promise(); + + // Restructure UserAttributes as an k:v + user.UserAttributes = user.UserAttributes.reduce((attrs, entry) => { + attrs[entry.Name] = entry.Value; + + return attrs; + }, {}); + + if (!user?.UserAttributes?.email) { + return respond(401, {}, "Unable to obtain user properties.", false); + } + + email = user.UserAttributes.email; + + } catch (e) { + console.log("Unable to retrieve user context.", e); + return respond(500, {}, "Unable to retrieve user context.", false); + } + + console.log(event.pathParameters) + + // Verify that required elements are present: + const missingElements = [ + "region", + "availabilityZone", + "instanceType", + "hashFile", + "instanceCount", + "instanceDuration", + "priceTarget" + ].reduce((missing, entry) => { + if (!campaign[entry]) { + missing.push[entry]; + } + + return missing; + }, []); + + if (missingElements.length > 0) { + return respond(400, {}, `Campaign missing required elements [${missingElements.join(', ')}]`); + } + + const verifiedManifest = { + rulesFiles: [], + cognitoIdentityId: entity + }; + + if (parseInt(campaign.hashType) < 0 || parseInt(campaign.hashType > 100000)) { + return respond(400, {}, "hashType " + campaign.hashType + " is invalid", false); + } + + verifiedManifest.hashType = campaign.hashType; + + if (parseInt(campaign.instanceCount) < 1) { + return respond(400, {}, "instanceCount must be greater than 1", false); + } + + verifiedManifest.instanceCount = campaign.instanceCount; + + if (parseInt(campaign.instanceDuration) < 1 || parseInt(campaign.instanceDuration) > 24) { + return respond(400, {}, "instanceDuration must be between 1 and 24", false); + } + + verifiedManifest.instanceDuration = campaign.instanceDuration; + + if (allowed_regions.indexOf(campaign.region) < 0) { + return respond(400, {}, campaign.region + " is not a valid or allowed region", false); + } + + verifiedManifest.region = campaign.region; + + if (Object.keys(vcpus).indexOf(campaign.instanceType) < 0) { + return respond(400, {}, campaign.instanceType + " is not a valid or allowed instance type.", false); + } + + let quota = 0; + switch (campaign.instanceType.split("")[0]) { + case 'g': + quota = variables.gQuota; + break; + + case 'p': + quota = variables.pQuota; + break; + + default: + return respond(400, {}, "Unable to determine applicable quota for " + campaign.instanceType, false); + break; + } + + const neededVCPUs = vcpus[campaign.instanceType] * parseInt(campaign.instanceCount); + if (quota < neededVCPUs) { + return respond(400, {}, "Order exceeds account quota limits. Needs " + neededVCPUs + " but account is limited to " + quota, false); + } + + verifiedManifest.instanceType = campaign.instanceType; + + if (parseFloat(campaign.priceTarget) < 0 || parseFloat(campaign.priceTarget) != campaign.priceTarget) { + return respond(400, {}, "Invalid priceTarget; must be integer greater than 0.", false); + } + + verifiedManifest.priceTarget = campaign.priceTarget; + + let expires; + + try { + expires = /[^-]Expires=([\d]+)&/.exec(campaign.hashFileUrl)?.[1]; + + if (!!!expires) { + let date = /X-Amz-Date=([^&]+)&/.exec(campaign.hashFileUrl)?.[1]; + let seconds = /X-Amz-Expires=([\d]+)&/.exec(campaign.hashFileUrl)?.[1]; + + date = new Date(Date.parse(date.replace(/(....)(..)(..T..)(..)/, "$1-$2-$3:$4:"))).getTime(); + + expires = date + (seconds * 1000) + } + + } catch (e) { + return respond(400, {}, "Invalid hashFileUrl.", false); + } + + const duration = expires - (new Date().getTime() / 1000); + if (duration < 900) { + return respond(400, {}, "hashFileUrl must be valid for at least 900 seconds, got " + Math.floor(duration), false); + } + + verifiedManifest.hashFileUrl = campaign.hashFileUrl; + + if (campaign.manualArguments) { + verifiedManifest.manualArguments = campaign.manualArguments; + } + + if (campaign.manualMask) { + if (campaign.mask || campaign.rulesFiles || campaign.dictionaryFile) { + return respond(400, {}, "Manual masks cannot be combined with any other attack type.", false); + } + + verifiedManifest.manualMask = campaign.manualMask; + } + + // Optional values might be present, but nulled. + let promises = []; + const knownMetadata = {}; + + let hashfilelines = 0; + let dictionaryKeyspace = 0; + let dictionarySize = 0; + let rulesKeyspace = 0; + let rulesSize = 0; + + try { + + // Verify hashfile metadata. + await s3.headObject({ + Bucket: variables.userdata_bucket, + Key: entity + '/' + campaign.hashFile + }).promise().then((data) => { + + if (data.ContentType.indexOf("text/plain") != 0) { + return respond(400, {}, "Content Type " + data.ContentType + " not permitted. Use text/plain.", false); + } + + knownMetadata[variables.dictionaryBucket + ":" + campaign.dictionaryFile] = data.Metadata; + verifiedManifest.hashFile = campaign.hashFile; + + return true; + }); + + } catch (err) { + return respond(400, {}, "Invalid hash file: " + err, false); + } + + try { + if (typeof campaign.rulesFiles != "undefined" && campaign.rulesFiles != null) { + console.log("Debug: Rules are enabled. Verifiying files."); + + // Verify that required elements are present: + let missingElements = [ + "rulesFile", + "dictionaryFile" + ].reduce((missing, entry) => { + if (!campaign[entry]) { + missing.push[entry]; + } + + return missing; + }, []); + + if (missingElements.length > 0) { + return respond(400, {}, `Rule-based campaign missing required elements [${missingElements.join(', ')}]`); + } + + const s3dict = new aws.S3({ region: variables.dictionaryBucketRegion }); + + // Verify dictionary + promises.push(new Promise((success, failure) => { + s3dict.headObject({ + Bucket: variables.dictionaryBucket, + Key: campaign.dictionaryFile + }, (err, data) => { + if (err) { + return failure(respond(400, {}, "Invalid dictionary file: " + err, false)); + } + + knownMetadata[variables.dictionaryBucket + ":" + campaign.dictionaryFile] = data.Metadata; + dictionaryKeyspace += data.Metadata.lines; + dictionarySize += parseInt(data.Metadata.size) + parseInt(data.ContentLength); + + verifiedManifest.dictionaryFile = campaign.dictionaryFile; + + console.log("Debug: Dictionary file verified"); + return success(); + }); + })); + + // Verify rule files + campaign.rulesFiles.forEach(function(e) { + promises.push(new Promise((success, failure) => { + s3dict.headObject({ + Bucket: variables.dictionaryBucket, + Key: e, + }, function(err, data) { + if (err) { + return failure(respond(400, {}, "Invalid rule file: " + err, false)); + } + + knownMetadata[variables.dictionaryBucket + ":" + e] = data.Metadata; + rulesKeyspace += data.Metadata.lines; + rulesSize += parseInt(data.Metadata.size) + parseInt(data.ContentLength); + + verifiedManifest.rulesFiles.push(e); + + console.log("Debug: Rules files verified"); + return success(); + }); + })); + }); + } + + var maskKeyspace = 1; + if (typeof campaign.mask != "undefined" && campaign.mask != null) { + console.log("Debug: Mask is enabled. Verifying mask."); + campaign.mask.split('?').slice(1).forEach(function(e) { + switch (e) { + case "l": + maskKeyspace *= 26; + break; + + case "u": + maskKeyspace *= 26; + break; + + case "d": + maskKeyspace *= 10; + break; + + case "s": + maskKeyspace *= 33; + break; + + case "a": + maskKeyspace *= 95; + break; + + case "b": + maskKeyspace *= 256; + break; + + default: + return respond(400, {}, "Invalid mask provided", false); + break; + } + }); + + verifiedManifest.mask = campaign.mask; + } + + await Promise.all(promises).then((data) => { + console.log("Debug: All promises returned."); + + // Compare the manifest with the verifiedManifest, and return any values that weren't processed. + + Object.keys(verifiedManifest).forEach(function(e) { + delete campaign[e]; + }); + + console.log("Debug: Processing complete. The following parameters from the campaign were not used."); + console.log(campaign); + + var wordlistKeyspace = ((dictionaryKeyspace > 0) ? dictionaryKeyspace : 1) * ((rulesKeyspace > 0) ? rulesKeyspace : 1); + + console.log("d: " + dictionarySize); + console.log("r: " + rulesSize); + var wordlistSize = dictionarySize + rulesSize; + var totalKeyspace = wordlistKeyspace * maskKeyspace; + + verifiedManifest.wordlistSize = wordlistSize; + + if (typeof verifiedManifest.dictionaryFile != "undefined") { + if (typeof verifiedManifest.mask != "undefined") { + verifiedManifest.attackType = 6; + } else { + verifiedManifest.attackType = 0; + } + } else { + if (typeof verifiedManifest.mask == "undefined" && typeof verifiedManifest.manualMask == "undefined") { + return respond(400, {}, "Must have either dictionary or mask defined", false); + } + + verifiedManifest.attackType = 3; + } + + if (typeof verifiedManifest.rulesFiles != "undefined" && verifiedManifest.rulesFiles.length > 0 && typeof verifiedManifest.manualMask == "undefined") { + verifiedManifest.attackType = 0; + } + + if (typeof verifiedManifest.attackType == "undefined") { + return respond(500, {}, "Hit an impossible combination of attack types. Exiting.", false); + } + }); + } catch (e) { + console.log("Campaign creation failed after validation.", e); + return respond(500, {}, "Campaign creation failed after validation.", false) + } + + const campaignId = uuid(); + let putManifest, editCampaign; + + try { + + putManifest = await s3.putObject({ + Body: JSON.stringify(verifiedManifest), + Bucket: variables.userdata_bucket, + Key: entity + '/campaigns/' + campaignId + '/manifest.json', + ContentType: 'text/plain' + }).promise(); + + } catch (e) { + console.log("Failed to place manifest file.", e); + return respond(500, {}, "Failed to place manifest file.", false) + } + + try { + const updateParams = aws.DynamoDB.Converter.marshall({ + instanceType: verifiedManifest.instanceType, + status: "AVAILABLE", + active: false, + durationSeconds: verifiedManifest.instanceDuration * 3600, + hashType: verifiedManifest.hashType, + hashes: 0, + instanceCount: verifiedManifest.instanceCount, + price: 0, + targetPrice: verifiedManifest.priceTarget, + region: verifiedManifest.region, + startTime: Math.floor(new Date().getTime() / 1000), + spotFleetRequestId: "", + cognitoUserEmail: email, + deleted: false, + lastuntil: Math.floor(new Date().getTime() / 1000) + 2700, + }); + + const updateCampaign = await ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: Object.keys(updateParams).reduce((attrs, entry) => { + attrs[entry] = { + Action: "PUT", + Value: updateParams[entry] + }; + + return attrs; + }, {}) + }).promise(); + } catch (e) { + console.log("Failed to update campaign record.", e); + return respond(500, {}, "Failed to update campaign record.", false) + } + + console.log("=================================================================================================="); + console.log("====== Campaign " + campaignId + " created. Preparing to execute! ======"); + console.log("=================================================================================================="); + + return respond(201, {}, {campaignId: campaignId}, true); +} + +function respond(statusCode, headers, body, success) { + + // Include terraform dns names as allowed origins, as well as localhost. + const allowed_origins = [variables.www_dns_names, "https://localhost"]; + + headers['Content-Type'] = 'text/plain'; + + if (allowed_origins.indexOf(origin) !== false) { + // Echo the origin back. I guess this is the best way to support multiple origins + headers['Access-Control-Allow-Origin'] = origin; + } else { + console.log("Invalid origin received.", origin); + } + + switch (typeof body) { + case "string": + body = { msg: body, success: success }; + break; + + case "object": + body.success = success; + break; + } + + const response = { + statusCode: statusCode, + headers: headers, + body: JSON.stringify(body), + } + + console.log(JSON.stringify(response)); + + cb(null, response); + + if (success == true) { + return Promise.resolve(body.msg); + } else { + return Promise.reject(body.msg); + } +} \ No newline at end of file diff --git a/lambda_functions/create_campaign/package-lock.json b/lambda_functions/create_campaign/package-lock.json new file mode 100644 index 0000000..2359d1a --- /dev/null +++ b/lambda_functions/create_campaign/package-lock.json @@ -0,0 +1,243 @@ +{ + "name": "execute_campaign", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "execute_campaign", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.599.0", + "uuid": "^3.3.2" + }, + "devDependencies": {} + }, + "node_modules/aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/terraform/lambda_functions/proxy_api_handler/package.json b/lambda_functions/create_campaign/package.json similarity index 63% rename from terraform/lambda_functions/proxy_api_handler/package.json rename to lambda_functions/create_campaign/package.json index 12d01d4..aa0a890 100644 --- a/terraform/lambda_functions/proxy_api_handler/package.json +++ b/lambda_functions/create_campaign/package.json @@ -1,13 +1,10 @@ { - "name": "proxy_api_handler", + "name": "execute_campaign", "version": "1.0.0", - "description": "NPK API Gateway Proxy Handler", + "description": "NPK execute_campaign Lambda", "main": "main.js", "dependencies": { "aws-sdk": "^2.599.0", - "aws-xray-sdk": "^2.5.0", - "aws4": "^1.8.0", - "dynamodb-data-types": "^3.0.1", "uuid": "^3.3.2" }, "devDependencies": {}, diff --git a/lambda_functions/delete_campaign/main.js b/lambda_functions/delete_campaign/main.js new file mode 100644 index 0000000..cab2f74 --- /dev/null +++ b/lambda_functions/delete_campaign/main.js @@ -0,0 +1,302 @@ +const accountDetails = require('./accountDetails.json'); + +const aws = require('aws-sdk'); +const ddb = new aws.DynamoDB({ region: accountDetails.primaryRegion }); +const s3 = new aws.S3({ region: accountDetails.primaryRegion }); + +let cb = ""; +let variables = {}; + +var cognito = new aws.CognitoIdentityServiceProvider({region: accountDetails.primaryRegion, apiVersion: "2016-04-18"}); + +exports.main = async function(event, context, callback) { + + console.log(JSON.stringify(event)); + + // Hand off the callback function for later. + cb = callback; + + // Get the available envvars into a usable format. + variables = JSON.parse(JSON.stringify(process.env)); + + let entity, UserPoolId, sub; + + try { + + console.log("Received event: " + JSON.stringify(event)); + + // Hand off the origin, too. Fix for weird case + origin = event?.headers?.origin ?? event?.headers?.Origin; + + var allowed_characters = /^[a-zA-Z0-9'"%\.\[\]\{\}\(\)\-\:\\\/\;\=\?\#\_+\s,!@#\$\^\*&]+$/; + if (!allowed_characters.test(JSON.stringify(event))) { + console.log("Request contains illegal characters"); + return respond(400, {}, "Request contains illegal characters", false); + } + + if (event?.requestContext?.identity?.cognitoAuthenticationType != "authenticated") { + console.log(`cognitoAuthenticationType ${event?.requestContext?.identity?.cognitoAuthenticationType} != "authenticated"`) + return respond(401, {}, "Authentication Required", false); + } + + entity = event.requestContext.identity.cognitoIdentityId; + + // Associate the user identity. + [ UserPoolId,, sub ] = event?.requestContext?.identity?.cognitoAuthenticationProvider?.split('/')[2]?.split(':'); + + if (!UserPoolId || !sub) { + console.log(`UserPoolId or sub is missing from ${event?.requestContext?.identity?.cognitoAuthenticationProvider}`); + respond(401, {}, "Authorization Required", false); + } + + } catch (e) { + console.log("Failed to process request.", e); + return respond(500, {}, "Failed to process request.", false); + } + + let user, email, Username; + + try { + // Get the user based on 'sub'. This is needed when the IdP isn't Cognito itself. + let userList = await cognito.listUsers({ UserPoolId, Filter: `sub = "${sub}"` }).promise(); + + if (!userList.Users?.[0]?.Username) { + console.log("Unable to find Cognito user from Subscriber ID.", e); + return respond(500, {}, "Unable to find Cognito user from Subscriber ID.", false); + } + + Username = userList.Users[0].Username; + + user = await cognito.adminGetUser({ UserPoolId, Username }).promise(); + + // Restructure UserAttributes as an k:v + user.UserAttributes = user.UserAttributes.reduce((attrs, entry) => { + attrs[entry.Name] = entry.Value + + return attrs; + }, {}); + + if (!user?.UserAttributes?.email) { + return respond(401, {}, "Unable to obtain user properties.", false); + } + + email = user.UserAttributes.email; + + } catch (e) { + console.log("Unable to retrieve user context.", e); + return respond(500, {}, "Unable to retrieve user context.", false); + } + + const campaignId = event?.pathParameters?.campaign; + + // Get the campaign entry from DynamoDB, and manifest from S3. + // * In parallel, to save, like, some milliseconds. + + let campaign; + + try { + campaign = await ddb.query({ + ExpressionAttributeValues: { + ':id': {S: entity}, + ':keyid': {S: `campaigns:${campaignId}`} + }, + KeyConditionExpression: 'userid = :id and keyid = :keyid', + TableName: "Campaigns" + }).promise(); + + campaign = aws.DynamoDB.Converter.unmarshall(campaign.Items[0]); + + } catch (e) { + console.log("Failed to retrieve campaign details.", e); + return respond(500, {}, "Failed to retrieve campaign details."); + } + + if (!campaign.status) { + return respond(404, {}, "Specified campaign does not exist.", false); + } + + console.log(`[+] Campaign ${campaignId} is associated with SFR ${campaign.spotFleetRequestId}`); + + var ec2 = new aws.EC2({region: campaign.region}); + + switch (campaign.status) { + case "STARTING": + case "RUNNING": + + let sfr; + + try { + sfr = await ec2.describeSpotFleetRequests({ + SpotFleetRequestIds: [campaign.spotFleetRequestId] + }).promise(); + } catch(e) { + + let update = await ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: { + active: { Action: 'PUT', Value: { BOOL: false }}, + status: { Action: 'PUT', Value: { S: "CANCELLED" }} + } + }).promise(); + + console.log("Failed to retrieve spot fleet request.", e); + return respond(500, {}, "Failed to retrieve spot fleet request.", false); + } + + if (!sfr.SpotFleetRequestConfigs?.[0]?.SpotFleetRequestId) { + + let update = await ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: { + active: { Action: 'PUT', Value: { BOOL: false }}, + status: { Action: 'PUT', Value: { S: "CANCELLED" }} + } + }).promise(); + + return respond(404, "Error retrieving spot fleet data: not found.", false); + } + + if (sfr.SpotFleetRequestConfigs[0].SpotFleetRequestState == "active") { + let cancellation; + + try { + cancellation = await ec2.cancelSpotFleetRequests({ + SpotFleetRequestIds: [sfr.SpotFleetRequestConfigs[0].SpotFleetRequestId], + TerminateInstances: true + }).promise(); + } catch(e) { + console.log("Failed to request cancellation of spot fleet request.", e); + return respond(500, {}, "Failed to request cancellation of spot fleet request.", false); + } + + if (cancellation?.SuccessfulFleetRequests?.[0].CurrentSpotFleetRequestState?.indexOf('cancelled') < 0) { + return respond(400, "Error cancelling spot fleet. Current state: " + cancallation.SuccessfulFleetRequests[0].CurrentSpotFleetRequestState, false); + } + } + + try { + let update = await ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: { + active: { Action: 'PUT', Value: { BOOL: false }}, + status: { Action: 'PUT', Value: { S: "CANCELLED" }} + } + }).promise(); + } catch(e) { + console.log("Failed to deactivate campaign.", e); + return respond(500, {}, "Failed to deactivate campaign.", false); + } + + return respond(200, {}, `Campaign ${campaignId} stopped.`, true); + + break; + + default: + + let entries; + + try { + entries = await ddb.query({ + ExpressionAttributeValues: { + ':id': {S: entity}, + ':keyid': {S: `${campaignId}:`} + }, + KeyConditionExpression: 'userid = :id and begins_with(keyid, :keyid)', + TableName: "Campaigns" + }).promise(); + } catch (e) { + console.log("Failed to retrieve events for campaign.", e); + return respond(500, {}, "Failed to retrieve events for campaign.", false); + } + + try { + + // Delete event entries for the campaign. + const promises = entries.Items.map((entry) => { + entry = aws.DynamoDB.Converter.unmarshall(entry); + + return ddb.deleteItem({ + Key: { + userid: {S: entity}, + keyid: {S: entry.keyid} + }, + TableName: "Campaigns" + }).promise(); + }); + + promises.push(ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: { + deleted: { Action: 'PUT', Value: { BOOL: true }} + } + }).promise()); + + let finished = await Promise.all(promises); + + } catch (e) { + console.log("Failed to delete campaign", e); + return respond(500, {}, "Failed to delete campaign", false); + } + + return respond(200, {}, `Campaign ${campaignId} deleted.`, true); + + break; + } + + + + return respond(200, {}, { msg: "Campaign started successfully", campaignId: campaignId, spotFleetRequestId: spotFleetRequest.SpotFleetRequestId }, true); +} + +function respond(statusCode, headers, body, success) { + + // Include terraform dns names as allowed origins, as well as localhost. + const allowed_origins = [variables.www_dns_names, "https://localhost"]; + + headers['Content-Type'] = 'text/plain'; + + if (allowed_origins.indexOf(origin) !== false) { + // Echo the origin back. I guess this is the best way to support multiple origins + headers['Access-Control-Allow-Origin'] = origin; + } else { + console.log("Invalid origin received.", origin); + } + + switch (typeof body) { + case "string": + body = { msg: body, success: success }; + break; + + case "object": + body.success = success; + break; + } + + const response = { + statusCode: statusCode, + headers: headers, + body: JSON.stringify(body), + } + + console.log(JSON.stringify(response)); + + cb(null, response); + + return Promise.resolve(body.msg); +} \ No newline at end of file diff --git a/lambda_functions/delete_campaign/package-lock.json b/lambda_functions/delete_campaign/package-lock.json new file mode 100644 index 0000000..a59eb63 --- /dev/null +++ b/lambda_functions/delete_campaign/package-lock.json @@ -0,0 +1,242 @@ +{ + "name": "delete_campaign", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "delete_campaign", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.599.0" + }, + "devDependencies": {} + }, + "node_modules/aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/lambda_functions/delete_campaign/package.json b/lambda_functions/delete_campaign/package.json new file mode 100644 index 0000000..ccd8e8e --- /dev/null +++ b/lambda_functions/delete_campaign/package.json @@ -0,0 +1,15 @@ +{ + "name": "delete_campaign", + "version": "1.0.0", + "description": "NPK delete_campaign Lambda", + "main": "main.js", + "dependencies": { + "aws-sdk": "^2.599.0" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Brad Woodward (brad@bradwoodward.io)", + "license": "MIT" +} diff --git a/lambda_functions/execute_campaign/main.js b/lambda_functions/execute_campaign/main.js new file mode 100644 index 0000000..a8db77d --- /dev/null +++ b/lambda_functions/execute_campaign/main.js @@ -0,0 +1,483 @@ +'use strict'; + +const fs = require('fs'); +const aws = require('aws-sdk'); + +const accountDetails = JSON.parse(fs.readFileSync('./accountDetails.json', 'ascii')); +const archs = Object.keys(accountDetails.families).reduce((acc, curr) => { + Object.keys(accountDetails.families[curr].instances).forEach((instance) => { + acc[instance] = accountDetails.families[curr].architecture || "x86_64"; + }); + + return acc; +}, {}); + +const amis = Object.keys(accountDetails.families).reduce((acc, curr) => { + Object.keys(accountDetails.families[curr].instances).forEach((instance) => { + acc[instance] = accountDetails.families[curr].ami || false; + }); + + return acc; +}, {}); + +const owners = Object.keys(accountDetails.families).reduce((acc, curr) => { + Object.keys(accountDetails.families[curr].instances).forEach((instance) => { + acc[instance] = accountDetails.families[curr].owner || false; + }); + + return acc; +}, {}); + +const ddb = new aws.DynamoDB({ region: accountDetails.primaryRegion }); +const s3 = new aws.S3({ region: accountDetails.primaryRegion }); + +let cb = ""; +let origin = ""; +let variables = {}; + +const cognito = new aws.CognitoIdentityServiceProvider({region: accountDetails.primaryRegion, apiVersion: "2016-04-18"}); + +exports.main = async function(event, context, callback) { + + console.log(JSON.stringify(event)); + + // Hand off the callback function for later. + cb = callback; + + // Get the available envvars into a usable format. + variables = JSON.parse(JSON.stringify(process.env)); + variables.regions = JSON.parse(variables.regions); + + let promises = []; + + // Enumerate the subnets based on VPCs per region. + try { + variables.availabilityZones = {}; + + for (const region of Object.keys(variables.regions)) { + + variables.availabilityZones[region] = {}; + + const ec2 = new aws.EC2({region: region}); + + promises.push(ec2.describeSubnets({ + Filters: [{ + Name: "vpc-id", + Values: [variables.regions[region]] + }] + }).promise().then((data) => { + data.Subnets.forEach((subnet) => { + variables.availabilityZones[region][subnet.AvailabilityZone] = subnet.SubnetId; + }); + })); + } + } catch (e) { + console.log(e); + return callback(`[!] Failed to retrieve subnets for VPC: ${e}`); + } + + let entity, UserPoolId, sub; + + try { + + console.log("Received event: " + JSON.stringify(event)); + + // Hand off the origin, too. Fix for weird case + origin = event?.headers?.origin ?? event?.headers?.Origin; + + var allowed_characters = /^[a-zA-Z0-9'"%\.\[\]\{\}\(\)\-\:\\\/\;\=\?\#\_+\s,!@#\$\^\*&]+$/; + if (!allowed_characters.test(JSON.stringify(event))) { + console.log("Request contains illegal characters"); + return respond(400, {}, "Request contains illegal characters", false); + } + + if (event?.requestContext?.identity?.cognitoAuthenticationType != "authenticated") { + console.log(`cognitoAuthenticationType ${event?.requestContext?.identity?.cognitoAuthenticationType} != "authenticated"`) + return respond(401, {}, "Authentication Required", false); + } + + entity = event.requestContext.identity.cognitoIdentityId; + + // Associate the user identity. + [ UserPoolId,, sub ] = event?.requestContext?.identity?.cognitoAuthenticationProvider?.split('/')[2]?.split(':'); + + if (!UserPoolId || !sub) { + console.log(`UserPoolId or sub is missing from ${event?.requestContext?.identity?.cognitoAuthenticationProvider}`); + respond(401, {}, "Authorization Required", false); + } + + } catch (e) { + console.log("Failed to process request.", e); + return respond(500, {}, "Failed to process request.", false); + } + + let user, email, Username; + + try { + // Get the user based on 'sub'. This is needed when the IdP isn't Cognito itself. + let userList = await cognito.listUsers({ UserPoolId, Filter: `sub = "${sub}"` }).promise(); + + if (!userList.Users?.[0]?.Username) { + console.log("Unable to find Cognito user from Subscriber ID.", e); + return respond(500, {}, "Unable to find Cognito user from Subscriber ID.", false); + } + + Username = userList.Users[0].Username; + + const user = await cognito.adminGetUser({ UserPoolId, Username }).promise(); + + // Restructure UserAttributes as an k:v + user.UserAttributes = user.UserAttributes.reduce((attrs, entry) => { + attrs[entry.Name] = entry.Value + + return attrs; + }, {}); + + if (!user?.UserAttributes?.email) { + return respond(401, {}, "Unable to obtain user properties.", false); + } + + email = user.UserAttributes.email; + + } catch (e) { + console.log(`Failed to retrieve subnets for VPC: ${e}`); + return respond(500, {}, "Failed to retrieve subnets for VPC.", false); + } + + console.log(event.pathParameters) + + const campaignId = event?.pathParameters?.campaign; + + // Get the campaign entry from DynamoDB, and manifest from S3. + // * In parallel, to save, like, some milliseconds. + + let campaign, manifestObject, manifest; + + try { + [campaign, manifestObject] = await Promise.all([ + ddb.query({ + ExpressionAttributeValues: { + ':id': {S: entity}, + ':keyid': {S: `campaigns:${campaignId}`} + }, + KeyConditionExpression: 'userid = :id and keyid = :keyid', + TableName: "Campaigns" + }).promise(), + + s3.getObject({ + Bucket: variables.userdata_bucket, + Key: `${entity}/campaigns/${campaignId}/manifest.json` + }).promise() + ]); + + manifest = JSON.parse(manifestObject.Body.toString('ascii')); + } catch (e) { + console.log("Failed to retrieve campaign details.", e); + return respond(500, {}, "Failed to retrieve campaign details.", false); + } + + if (campaign.Items?.[0]?.status?.S != "AVAILABLE") { + return respond(404, {}, "Campaign doesn't exist or is not in 'AVAILABLE' status.", false); + } + + // Test whether the provided presigned URL is expired. + + let expires, duration; + + try { + expires = /[^-]Expires=([\d]+)&/.exec(manifest.hashFileUrl)?.[1]; + + if (!!!expires) { + let date = /X-Amz-Date=([^&]+)&/.exec(manifest.hashFileUrl)?.[1]; + let seconds = /X-Amz-Expires=([\d]+)&/.exec(manifest.hashFileUrl)?.[1]; + + date = new Date(Date.parse(date.replace(/(....)(..)(..T..)(..)/, "$1-$2-$3:$4:"))).getTime(); + + expires = date + (seconds * 1000) + } + + duration = expires - (new Date().getTime() / 1000); + + if (duration < 900) { + return respond(400, {}, `hashFileUrl must be valid for at least 900 seconds, got ${Math.floor(duration)}`, false); + } + } catch (e) { + console.log(e); + return respond(400, {}, "Invalid hashFileUrl; missing expiration", false); + } + + // Campaign is valid. Get AZ pricing and Image AMI + // * Again in parallel, to save, like, some more milliseconds. + + const ec2 = new aws.EC2({region: manifest.region}); + let pricing, image; + + const imageFilters = [{ + Name: "virtualization-type", + Values: ["hvm"] + },{ + Name: "root-device-type", + Values: ["ebs"] + }]; + + imageFilters.push({ + Name: "architecture", + Values: [archs[manifest.instanceType]] + }); + + const defaultImageName = "Deep Learning AMI GPU TensorFlow * (Amazon Linux 2) *"; + + imageFilters.push({ + Name: "name", + Values: [amis[manifest.instanceType] || defaultImageName] + }); + + const defaultImageOwner = "898082745236"; + + imageFilters.push({ + Name: "owner-id", + Values: [owners[manifest.instanceType] || defaultImageOwner] + }); + + console.log(imageFilters); + + try { + [pricing, image] = await Promise.all([ + ec2.describeSpotPriceHistory({ + EndTime: Math.round(Date.now() / 1000), + ProductDescriptions: [ "Linux/UNIX (Amazon VPC)" ], + InstanceTypes: [ manifest.instanceType ], + StartTime: Math.round(Date.now() / 1000) + }).promise(), + + ec2.describeImages({ + Filters: imageFilters + }).promise() + ]); + } catch (e) { + console.log("Failed to retrieve price and image details.", e); + return respond(500, {}, "Failed to retrieve price and image details.", false); + } + + console.log(image); + + image = image.Images.reduce((newest, entry) => + entry.CreationDate > newest.CreationDate ? entry : newest + , { CreationDate: '1980-01-01T00:00:00.000Z' }); + + if (!!!image.ImageId) { + console.log("Unable to find a suitable AMI."); + return respond(500, {}, "Unable to find a suitable AMI.", false); + } + + let spotFleetParams; + + try { + + // Calculate the necessary volume size + + const volumeSize = (Math.ceil(manifest.wordlistSize / 1073741824) * 2) + 1; + console.log(`Wordlist is ${manifest.wordlistSize / 1073741824}GiB. Allocating ${volumeSize}GiB`); + + // Build a launchSpecification for each AZ in the target region. + + const instance_userdata = new Buffer.from(fs.readFileSync(__dirname + '/userdata.sh', 'utf-8') + .replace("{{APIGATEWAY}}", process.env.apigateway)) + .toString('base64'); + + const launchSpecificationTemplate = { + ImageId: image.ImageId, + KeyName: "npk-key", + InstanceType: manifest.instanceType, + NetworkInterfaces: [ + { + DeviceIndex: 0, + DeleteOnTermination: true, + AssociatePublicIpAddress: true + } + ], + BlockDeviceMappings: [{ + DeviceName: '/dev/xvdb', + Ebs: { + DeleteOnTermination: true, + Encrypted: false, + VolumeSize: volumeSize, + VolumeType: "gp2" + } + }], + IamInstanceProfile: { + Arn: variables.instanceProfile + }, + TagSpecifications: [{ + ResourceType: "instance", + Tags: [{ + Key: "MaxCost", + Value: ((manifest.priceTarget < variables.campaign_max_price) ? manifest.priceTarget : variables.campaign_max_price).toString() + }, { + Key: "ManifestPath", + Value: `${entity}/campaigns/${campaignId}` + }] + }], + UserData: instance_userdata + } + + /*const launchSpecificationTemplate = { + IamInstanceProfile: { + Arn: variables.instanceProfile + }, + ImageId: image.ImageId, + KeyName: "npk-key", + InstanceType: manifest.instanceType, + BlockDeviceMappings: [{ + DeviceName: '/dev/xvdb', + Ebs: { + DeleteOnTermination: true, + Encrypted: false, + VolumeSize: volumeSize, + VolumeType: "gp2" + } + }], + NetworkInterfaces: [{ + AssociatePublicIpAddress: true, + DeviceIndex: 0, + // SubnetId: Gets populated below. + }], + Placement: { + // AvailabilityZone: Gets populated below. + }, + TagSpecifications: [{ + ResourceType: "instance", + Tags: [{ + Key: "MaxCost", + Value: ((manifest.priceTarget < variables.campaign_max_price) ? manifest.priceTarget : variables.campaign_max_price).toString() + }, { + Key: "ManifestPath", + Value: `${entity}/campaigns/${campaignId}` + }] + }], + UserData: instance_userdata + };*/ + + // Create a copy of the launchSpecificationTemplate for each AvailabilityZone in the campaign's region. + console.log(variables.availabilityZones) + + const launchSpecifications = Object.keys(variables.availabilityZones[manifest.region]).reduce((specs, entry) => { + const az = JSON.parse(JSON.stringify(launchSpecificationTemplate)); // Have to deep-copy to avoid referential overrides. + + // az.Placement.AvailabilityZone = entry; + az.NetworkInterfaces[0].SubnetId = variables.availabilityZones[manifest.region][entry]; + + return specs.concat(az); + }, []); + + // Get the average spot price across all AZs in the region. + const spotPrice = pricing.SpotPriceHistory.reduce((average, entry) => average + (entry.SpotPrice / pricing.SpotPriceHistory.length), 0); + const maxDuration = (Number(manifest.instanceDuration) < variables.campaign_max_price / spotPrice) ? Number(manifest.instanceDuration) : variables.campaign_max_price / spotPrice; + + console.log(`Setting Duration to ${maxDuration} (Spot average $${spotPrice} with limit of $${variables.campaign_max_price})`); + + spotFleetParams = { + SpotFleetRequestConfig: { + AllocationStrategy: "lowestPrice", + IamFleetRole: variables.iamFleetRole, + InstanceInterruptionBehavior: "terminate", + LaunchSpecifications: launchSpecifications, + SpotPrice: (manifest.priceTarget / (manifest.instanceCount * manifest.instanceDuration) * 2).toString(), + TargetCapacity: manifest.instanceCount, + ReplaceUnhealthyInstances: false, + TerminateInstancesWithExpiration: true, + Type: "request", + ValidFrom: (new Date().getTime() / 1000), + ValidUntil: (new Date().getTime() / 1000) + (maxDuration * 3600) + } + }; + + console.log(JSON.stringify(spotFleetParams)); + } catch (e) { + console.log("Failed to generate launch specifications.", e); + return respond(500, {}, "Failed to generate launch specifications.", false); + } + + let spotFleetRequest; + + try { + spotFleetRequest = await ec2.requestSpotFleet(spotFleetParams).promise(); + } catch (e) { + console.log("Failed to request spot fleet.", e); + return respond(500, {}, "Failed to request spot fleet.", false); + } + + // Campaign created successfully. + + console.log(`Successfully requested spot fleet ${spotFleetRequest.SpotFleetRequestId}`); + + try { + const updateParams = aws.DynamoDB.Converter.marshall({ + active: true, + status: "STARTING", + spotFleetRequestId: spotFleetRequest.SpotFleetRequestId, + startTime: Math.floor(new Date().getTime() / 1000), + eventType: "CampaignStarted", + lastuntil: 0, + }); + + const updateCampaign = await ddb.updateItem({ + Key: { + userid: {S: entity}, + keyid: {S: `campaigns:${campaignId}`} + }, + TableName: "Campaigns", + AttributeUpdates: Object.keys(updateParams).reduce((attrs, entry) => { + attrs[entry] = { + Action: "PUT", + Value: updateParams[entry] + }; + + return attrs; + }, {}) + + }).promise(); + } catch (e) { + console.log("Spot fleet submitted, but failed to mark Campaign as 'STARTING'. This is a catastrophic error.", e); + return respond(500, {}, "Spot fleet submitted, but failed to mark Campaign as 'STARTING'. This is a catastrophic error.", false); + } + + return respond(200, {}, { msg: "Campaign started successfully", campaignId: campaignId, spotFleetRequestId: spotFleetRequest.SpotFleetRequestId }, true); +} + +function respond(statusCode, headers, body, success) { + + // Include terraform dns names as allowed origins, as well as localhost. + const allowed_origins = [variables.www_dns_names, "https://localhost"]; + + headers['Content-Type'] = 'text/plain'; + + if (allowed_origins.indexOf(origin) !== false) { + // Echo the origin back. I guess this is the best way to support multiple origins + headers['Access-Control-Allow-Origin'] = origin; + } else { + console.log("Invalid origin received.", origin); + } + + switch (typeof body) { + case "string": + body = { msg: body, success: success }; + break; + + case "object": + body.success = success; + break; + } + + const response = { + statusCode: statusCode, + headers: headers, + body: JSON.stringify(body), + } + + console.log(JSON.stringify(response)); + + cb(null, response); + + return Promise.resolve(body.msg); +} \ No newline at end of file diff --git a/lambda_functions/execute_campaign/package-lock.json b/lambda_functions/execute_campaign/package-lock.json new file mode 100644 index 0000000..2b2a466 --- /dev/null +++ b/lambda_functions/execute_campaign/package-lock.json @@ -0,0 +1,242 @@ +{ + "name": "execute_campaign", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "execute_campaign", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.599.0" + }, + "devDependencies": {} + }, + "node_modules/aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "aws-sdk": { + "version": "2.982.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.982.0.tgz", + "integrity": "sha512-5w+m8Ia35NqB4TOZHEKts5zSV+FTdc7hTYbN4N4lZ4YU3cLTMt496ojh5UI3Deo8IIlqgTf3UVuq6Y6cPpVxkg==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/lambda_functions/execute_campaign/package.json b/lambda_functions/execute_campaign/package.json new file mode 100644 index 0000000..bd0b67b --- /dev/null +++ b/lambda_functions/execute_campaign/package.json @@ -0,0 +1,15 @@ +{ + "name": "execute_campaign", + "version": "1.0.0", + "description": "NPK execute_campaign Lambda", + "main": "main.js", + "dependencies": { + "aws-sdk": "^2.599.0" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Brad Woodward (brad@bradwoodward.io)", + "license": "MIT" +} diff --git a/lambda_functions/spot_interrupt_catcher/main.js b/lambda_functions/spot_interrupt_catcher/main.js new file mode 100644 index 0000000..410480c --- /dev/null +++ b/lambda_functions/spot_interrupt_catcher/main.js @@ -0,0 +1,81 @@ +'use strict'; + +const aws = require("aws-sdk"); +const settings = JSON.parse(JSON.stringify(process.env)); + +exports.main = async function (event, context, callback) { + console.log(JSON.stringify(event)); + if (event['detail-type'] != "EC2 Spot Instance Interruption Warning") { + console.log(`[!] Wrong event type received. Got: ${event['detail-type']}`); + return callback("Wrong event type received"); + } + + if (!event.region || !event.detail?.['instance-id']) { + console.log(`[!] Event is missing critical details.`); + return callback("Event is missing critical details"); + } + + let instance, instanceId; + + try { + instanceId = event.detail['instance-id']; + + console.log(`[+] Caught interruption event for instance ${instanceId}`); + + const ec2 = new aws.EC2({ region: event.region }); + + // Get details for the instance to be terminated: + instance = await ec2.describeInstances({ + Filters: [{ + Name: "instance-id", + Values: [ instanceId ] + }] + }).promise(); + + instance = instance.Reservations[0].Instances[0]; + + // Convert the tags from entries to a map. + instance.Tags = instance.Tags.reduce((tags, tag) => { + tags[tag.Key] = tag.Value; + + return tags; + }, {}); + } catch (e) { + console.log(`[!] Failed to retrieve instance details. ${e}`); + return callback("Failed to retrieve instance details"); + } + + let user, campaignId; + + try { + // Pull the campaign from the ManifestPath tag + if (!instance.Tags?.ManifestPath || instance.Tags.ManifestPath.indexOf('/campaigns/') < 0) { + console.log(`[!] Instance tag 'ManifestPath' is invalid. Got tags: ${JSON.stringify(instance.Tags)}`); + return callback("Instance tag 'ManifestPath' is invalid"); + } + + [user, campaignId] = instance.Tags.ManifestPath.split('/campaigns/'); + + // Update that campaign details + const ddb = new aws.DynamoDB({ region: settings.region }); + + await ddb.updateItem({ + Key: { + userid: { S: user }, + keyid: { S: `campaigns:${campaignId}` } + }, + TableName: "Campaigns", + AttributeUpdates: { + interrupted: { + Action: "PUT", + Value: { S: "Spot Interruption" } + } + } + }).promise(); + } catch (e) { + console.log(`[!] Failed to mark instance as interrupted. ${e}`); + return callback("Failed to mark instance as interrupted"); + } + + console.log(`[+] Marked campaign ${campaignId} as interrupted.`); +} \ No newline at end of file diff --git a/lambda_functions/spot_interrupt_catcher/package-lock.json b/lambda_functions/spot_interrupt_catcher/package-lock.json new file mode 100644 index 0000000..2986d9a --- /dev/null +++ b/lambda_functions/spot_interrupt_catcher/package-lock.json @@ -0,0 +1,241 @@ +{ + "name": "spot_interrupt_catcher", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "spot_interrupt_catcher", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "aws-sdk": "^2.1013.0" + } + }, + "node_modules/aws-sdk": { + "version": "2.1013.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1013.0.tgz", + "integrity": "sha512-TXxkp/meAdofpC15goFpNuur7fvh/mcMRfHJoP1jYzTtD0wcoB4FK16GLcny0uDYgkQgZuiO9QYv3Rq5bhGCqQ==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "aws-sdk": { + "version": "2.1013.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1013.0.tgz", + "integrity": "sha512-TXxkp/meAdofpC15goFpNuur7fvh/mcMRfHJoP1jYzTtD0wcoB4FK16GLcny0uDYgkQgZuiO9QYv3Rq5bhGCqQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/lambda_functions/spot_interrupt_catcher/package.json b/lambda_functions/spot_interrupt_catcher/package.json new file mode 100644 index 0000000..d75aaf3 --- /dev/null +++ b/lambda_functions/spot_interrupt_catcher/package.json @@ -0,0 +1,14 @@ +{ + "name": "spot_interrupt_catcher", + "version": "1.0.0", + "description": "NPK listener for spot interrupt events", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "aws-sdk": "^2.1013.0" + } +} diff --git a/lambda_functions/spot_monitor/main.js b/lambda_functions/spot_monitor/main.js new file mode 100644 index 0000000..a3f13f8 --- /dev/null +++ b/lambda_functions/spot_monitor/main.js @@ -0,0 +1,515 @@ +"use strict"; + +const fs = require('fs'); +const aws = require('aws-sdk'); +const settings = JSON.parse(JSON.stringify(process.env)); +settings.regions = JSON.parse(settings.regions); + +const accountDetails = JSON.parse(fs.readFileSync('./accountDetails.json', 'ascii')); + +aws.config.apiVersions = { + dynamodb: '2012-08-10' +}; + +aws.config.update({region: settings.region}); + +const db = new aws.DynamoDB(); + +exports.main = async function(event, context, callback) { + + let spotFleets = {}; + let promises = []; + + // Enumerate spot fleet requests and histories across all regions. + try { + + for (const region of Object.keys(settings.regions)) { + const ec2 = new aws.EC2({region: region}); + + promises.push(ec2.describeSpotFleetRequests({}).promise().then(async (data) => { + + for (let config of data.SpotFleetRequestConfigs) { + // Skip fleets more than a day old, since some history items can expire before the fleet does. + if (new Date(config.CreateTime).getTime() < new Date().getTime() - (1000 * 60 * 60 * 24)) { + console.log(`[-] ${config.SpotFleetRequestId} created more than a day ago. Skipping.`); + continue; + } + + const history = await getSpotRequestHistory(ec2, config.SpotFleetRequestId); + + spotFleets[config.SpotFleetRequestId] = { + ...config, + region, + history, + instances: {}, + price: 0 + }; + }; + })); + }; + + await Promise.all(promises); + + if (!Object.keys(spotFleets).length) { + return callback(null, "[*] No spot fleets to process."); + } else { + console.log(`[+] Found ${Object.keys(spotFleets).length} SFRs to process.`); + } + + } catch (e) { + console.log(e); + return callback(`[!] Failed to retreive spot fleets and history: ${e}`); + } + + promises = []; + + // Enumerate spot instances from all regions, and associate them with their SFRs. + try { + Object.keys(settings.regions).forEach(function(region) { + const ec2 = new aws.EC2({region: region}); + + promises.push(ec2.describeSpotInstanceRequests({}).promise().then((data) => { + data.SpotInstanceRequests.forEach(function(request) { + request.Tags = request.Tags.reduce((tags, tag) => { + tags[tag.Key] = tag.Value; + + return tags; + }, {}); + + if (!request.Tags['aws:ec2spot:fleet-request-id']) { + console.log(`[-] Instance ${request.InstanceId} has no SFR ID.`); + console.log(request.Tags); + return false + } + + const sfr = request.Tags['aws:ec2spot:fleet-request-id']; + + spotFleets[sfr].instances[request.InstanceId] = { + Status: { + Code: request.Status.Code, + Message: request.Status.Message + }, + State: request.State + } + }); + + return true; + })); + }); + + await Promise.all(promises); + + } catch (e) { + console.log(e); + return callback(`[!] Failed to retreive spot instance statuses: ${e}`); + } + + promises = []; + + try { + Object.keys(spotFleets).forEach((fleetId) => { + const fleet = spotFleets[fleetId]; + + const instanceCount = Object.keys(fleet.instances).length; + + if (!instanceCount) { + console.log(`[-] Found 0 instances for ${fleetId}`); + } else { + console.log(`[+] Found ${instanceCount} instances for ${fleetId}`); + } + + const hasOpenInstances = Object.keys(fleet.instances).reduce((state, instanceId) => { + const instance = fleet.instances[instanceId]; + + if (['open', 'active'].indexOf(instance.State) > -1 ) { + return true; + } + + return state; + }, false); + + if (!hasOpenInstances) { + console.log(`[+] Fleet ${fleetId} with status ${fleet.SpotFleetRequestState} has open instances: ${hasOpenInstances}.`); + } + + if (!!instanceCount && !hasOpenInstances && !/cancelled/.test(fleet.SpotFleetRequestState)) { + const ec2 = new aws.EC2({region: fleet.region}); + + promises.push(ec2.cancelSpotFleetRequests({ + TerminateInstances: true, + SpotFleetRequestIds: [fleetId] + }).promise().then((data) => { + console.log(`[+] Cancelled ${fleetId} due to all instance requests being closed.`); + }, (e) => { + console.log(`[-] Unable to cancel ${fleetId} due to all instance requests being closed.`, e); + })); + } + }); + } catch (e) { + console.log(e); + return callback(`[!] Failed to handle exhausted campaigns: ${e}`); + } + + promises = []; + const spotPrices = {}; + + // Get spot instance events, along with price history for each instance type found. + try { + + // Iterate over the identified SFRs and remove any that are cancelled and empty. + spotFleets = Object.keys(spotFleets).reduce((fleets, fleetId) => { + const fleet = spotFleets[fleetId]; + + if (!!fleet.instances.length && /cancelled/.test(fleet.SpotFleetRequestState)) { + console.log(`[-] Cancelled fleet [${fleet.SpotFleetRequestId}] has no instance statuses.`); + return fleets; + } + + if (/cancelled/.test(fleet.SpotFleetRequestState)) { + const fleetState = (fleet.SpotFleetRequestState == "cancelled") ? "COMPLETED" : "STOPPING"; + + promises.push(editCampaignViaRequestId(fleet.SpotFleetRequestId, { + active: false, + spotRequestHistory: fleet.history, + spotRequestStatus: fleet.instances, + status: fleetState + }).then((data) => { + console.log(`[+] Marked campaign of ${fleet.SpotFleetRequestId} as ${fleetState}`); + }, (e) => { + console.log(`[!] Failed attempting to update ${promiseDetails.fleets[fleetId].SpotFleetRequestId}`); + })); + + if (fleet.SpotFleetRequestState == "cancelled") { + return fleets; + } + } + + if (!!fleet.instances.length) { + console.log(`[!] Fleet [${fleet.SpotFleetRequestId}] with status [${fleet.SpotFleetRequestState}] has no instance statuses.`); + } + + // Loop over 'instanceChange' events to record the start and stop time of given instances. + fleet.history.forEach((historyRecord) => { + if (historyRecord.EventType != "instanceChange") { + return false; + } + + const event = JSON.parse(historyRecord.EventInformation.EventDescription); + + if (!historyRecord?.EventInformation?.InstanceId) { + return false; + } + + const instanceId = historyRecord.EventInformation.InstanceId; + + if (!fleet.instances[instanceId]) { + // This can happen when nodes are new. Be lenient. + return false; + } + + // Create the basic record, to be populated based on event status. + if (!fleet.instances[instanceId].history) { + + fleet.instances[instanceId].instanceType = event.instanceType; + fleet.instances[instanceId].image = event.image; + fleet.instances[instanceId].availabilityZone = event.availabilityZone; + fleet.instances[instanceId].ProductDescriptions = event.ProductDescriptions; + + fleet.instances[instanceId].history = { + startTime: 0, + endTime: new Date().getTime() / 1000 + } + } + + // Set record details based on event type. + switch (historyRecord.EventInformation.EventSubType) { + case "launched": + fleet.instances[instanceId].history.startTime = new Date(historyRecord.Timestamp).getTime(); + break; + + case "terminated": + fleet.instances[instanceId].history.endTime = new Date(historyRecord.Timestamp).getTime(); + break; + } + + // Retrieve spot price history based on region and instance type. + const spotKey = fleet.region + ":" + event.instanceType; + + // Skip remaining processing if it's already been requested. + if (!!spotPrices[spotKey]) { + return false; + } + + spotPrices[spotKey] = {}; + + const ec2 = new aws.EC2({region: fleet.region}); + promises.push(ec2.describeSpotPriceHistory({ + InstanceTypes: [event.instanceType], + ProductDescriptions: ["Linux/UNIX (Amazon VPC)"], + + // Default to retrieving the last two days' spot prices. + StartTime: (new Date().getTime() / 1000) - (60 * 60 * 48) + }).promise().then((data) => { + + data.SpotPriceHistory.forEach(function(spotHistoryItem) { + const az = spotHistoryItem.AvailabilityZone; + const dateKey = new Date(spotHistoryItem.Timestamp).getTime(); + + if (!spotPrices[spotKey][az]) { + spotPrices[spotKey][az] = {}; + } + + spotPrices[spotKey][az][dateKey] = spotHistoryItem.SpotPrice; + }); + })); + }); + + fleets[fleetId] = fleet; + return fleets; + }, {}); + + await Promise.all(promises); + + } catch (e) { + console.log(e); + return callback(`[!] Failed to get instance history and prices: ${e}`); + } + + promises = []; + + // Promises are all done. Let's calculate the instance costs, and roll them up to the fleet. + try { + + console.log(spotPrices); + + Object.keys(spotFleets).forEach((fleetId) => { + const fleet = spotFleets[fleetId]; + + let badInstance = false; + Object.keys(fleet.instances).forEach((instanceId) => { + const instance = fleet.instances[instanceId]; + + const prices = spotPrices?.[fleet.region + ':' + instance.instanceType]?.[instance.availabilityZone]; + + if (!!!prices) { + badInstance = true; + return false; + } + + prices[new Date().getTime()] = prices[Object.keys(prices).slice(-1)]; + + const timestamps = Object.keys(prices).sort(function(a, b) { return a - b; }); + + let accCost = 0; + let accSeconds = 0; + + if (instance.history.startTime == 0) { + badInstance = true; + return false; + } + + let duration = instance.history.endTime - instance.history.startTime; + + // This isn't a thing anymore. Fun times. + //duration = (duration < 3600) ? 3600 : duration; + + let tempStartTime = instance.history.startTime; + + // console.log("duration: " + duration); + timestamps.forEach(function(e) { + // console.log("Checking against time: " + e) + if (e <= tempStartTime || accSeconds >= duration) { + return true; + } + + var ppms = prices[e] / 3600; + var mseconds = e - tempStartTime; + + if (accSeconds + mseconds > duration) { + mseconds -= (accSeconds + mseconds - duration); + } + + accCost += (mseconds * ppms); + accSeconds += mseconds; + + tempStartTime += mseconds; + }); + + console.log(`[*] Instance ${instanceId} up for ${accSeconds} seconds; estimated cost $${accCost.toFixed(4)}`); + instance.price = accCost; + fleet.price += accCost; + }); + + // Skip the fleet if an instance has partially truncated history. + if (badInstance) { + console.log(`[!] SFR ${fleetId} has incomplete instance history. Skipping update.`); + return false; + } + + const tags = {}; + fleet.SpotFleetRequestConfig.LaunchSpecifications[0].TagSpecifications.forEach((tagspec) => { + tagspec.Tags.forEach(function(tag) { + tags[tag.Key] = tag.Value; + }); + }); + + const ec2 = new aws.EC2({region: fleet.region}); + const fleetState = (/cancelled/.test(fleet.SpotFleetRequestState)) ? "STOPPING" : "RUNNING"; + + promises.push(editCampaignViaRequestId(fleetId, { + active: true, + price: fleet.price, + spotRequestHistory: fleet.history, + spotRequestStatus: fleet.instances, + status: fleetState + }).then((data) => { + console.log(`[+] Updated price of fleet ${fleetId}`); + }, (e) => { + console.log(`[!] Failed attempting to update price for ${fleetId}`); + })); + + if (fleet.price > parseFloat(tags.MaxCost) || fleet.price > parseFloat(settings.campaign_max_price)) { + console.log("Fleet " + fleetId + " costs exceed limits; terminating."); + + promises.push(ec2.cancelSpotFleetRequests({ + TerminateInstances: true, + SpotFleetRequestIds: [fleetId] + }).promise().then((data) => { + console.log(`Successfully terminated ${fleetId}`); + return Promise.resolve(); + }, (e) => { + console.log(e); + return criticalAlert(`Failed to terminate fleet ${fleetId} with cost $${fleet.price}`); + })); + } + + if (fleet.price > parseFloat(tags.MaxCost) * 1.1 || fleet.price > parseFloat(settings.campaign_max_price) * 1.1) { + console.log("Fleet " + fleetId + " costs CRITICALLY exceed limits (" + fleet.price + "); terminating and raising critical alert."); + promises.push(criticalAlert("SFR " + fleetId + " current price is: " + fleet.price + "; Terminating.")); + + promises.push(ec2.cancelSpotFleetRequests({ + TerminateInstances: true, + SpotFleetRequestIds: [fleetId] + }).promise().then((data) => { + console.log(`Successfully terminated ${fleetId}`); + return Promise.resolve(); + }, (e) => { + return criticalAlert(`Failed to terminate fleet ${fleetId} with cost $${fleet.price}`); + })); + } + }); + + await Promise.all(promises); + + } catch (e) { + console.log(e); + return callback(`[!] Failed to update spot instance costs: ${e}`); + } + + return callback(null, `[+] Reviewed [${Object.keys(spotFleets).length}] SFRs.`); +}; + +function criticalAlert(message) { + return new Promise((success, failure) => { + var sns = new aws.SNS({apiVersion: '2010-03-31', region: 'us-west-2'}); + + sns.publish({ + Message: "NPK CriticalAlert: " + message, + Subject: "NPK CriticalAlert", + TopicArn: settings.critical_events_sns_topic + }, function (err, data) { + if (err) { + console.log('CRITICAL ALERT FAILURE: ' + err); + return failure(err); + } + + console.log('CRITICAL ALERT: ' + message); + return success(data); + }); + }); +}; + +function editCampaign(entity, campaign, values) { + return new Promise((success, failure) => { + values = aws.DynamoDB.Converter.marshall(values); + + Object.keys(values).forEach(function(e) { + values[e] = { + Action: "PUT", + Value: values[e] + }; + }); + + var ddbParams = { + Key: { + userid: {S: entity}, + keyid: {S: "campaigns:" + campaign} + }, + TableName: "Campaigns", + AttributeUpdates: values + }; + + // console.log(JSON.stringify(ddbParams)); + + db.updateItem(ddbParams, function (err, data) { + if (err) { + return failure(err); + } + + return success(true); + }); + }); +} + +function editCampaignViaRequestId(spotFleetRequestId, values) { + return new Promise((success, failure) => { + db.query({ + ExpressionAttributeValues: { + ':s': {S: spotFleetRequestId} + }, + KeyConditionExpression: 'spotFleetRequestId = :s', + IndexName: "SpotFleetRequests", + TableName: "Campaigns" + }, function (err, data) { + if (err) { + return failure(cb("Error querying SpotFleetRequest table: " + err)); + } + + if (data.Items.length < 1) { + return success(null); + } + + data = aws.DynamoDB.Converter.unmarshall(data.Items[0]); + console.log("[+] Found campaign " + data.keyid.split(':').slice(1)); + + editCampaign(data.userid, data.keyid.split(':').slice(1), values).then((updates) => { + success(updates); + }); + }); + }); +} + +function getSpotRequestHistory(ec2, sfr, nextToken = null) { + let history = []; + + return ec2.describeSpotFleetRequestHistory({ + SpotFleetRequestId: sfr, + StartTime: "1970-01-01T00:00:00Z", + NextToken: nextToken + }).promise().then((data) => { + + history = history.concat(data.HistoryRecords); + + if (data.hasOwnProperty('NextToken')) { + return getSpotRequestHistory(ec2, sfr, data.NextToken); + } + + history = history.map((entry) => { + entry.Timestamp = new Date(entry.Timestamp).getTime() / 1000; + + return entry + }); + + return history; + }); +} \ No newline at end of file diff --git a/lambda_functions/spot_monitor/package-lock.json b/lambda_functions/spot_monitor/package-lock.json new file mode 100644 index 0000000..af63565 --- /dev/null +++ b/lambda_functions/spot_monitor/package-lock.json @@ -0,0 +1,761 @@ +{ + "name": "spot_monitor", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "spot_monitor", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.599.0", + "aws-xray-sdk": "^2.5.0", + "dynamodb-data-types": "^3.0.1" + } + }, + "node_modules/@types/body-parser": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", + "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/continuation-local-storage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.2.tgz", + "integrity": "sha512-aItm+aYPJ4rT1cHmAxO+OdWjSviQ9iB5UKb5f0Uvgln0N4hS2mcDodHtPiqicYBXViUYhqyBjhA5uyOcT+S34Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", + "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz", + "integrity": "sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw==", + "dependencies": { + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + }, + "node_modules/@types/mysql": { + "version": "2.15.8", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", + "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", + "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==" + }, + "node_modules/@types/pg": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", + "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", + "dependencies": { + "@types/node": "*", + "@types/pg-types": "*" + } + }, + "node_modules/@types/pg-types": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz", + "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "node_modules/@types/serve-static": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", + "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "node_modules/async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "node_modules/async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "dependencies": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" + }, + "engines": { + "node": "<=0.11.8 || >0.11.10" + } + }, + "node_modules/atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" + }, + "node_modules/aws-sdk": { + "version": "2.599.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", + "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", + "dependencies": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-xray-sdk": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-2.5.0.tgz", + "integrity": "sha512-KBTF9QUq0zu24t+gFh3VATYDNx295VzZUUjpZ1OmIEbcs3Zqmox5L6VAqjCgGfJeLaCUAWPLkduxau3LuDpqcw==", + "dependencies": { + "aws-xray-sdk-core": "^2.5.0", + "aws-xray-sdk-express": "^2.5.0", + "aws-xray-sdk-mysql": "^2.5.0", + "aws-xray-sdk-postgres": "^2.5.0", + "pkginfo": "^0.4.0" + }, + "engines": { + "node": ">= 4.x" + } + }, + "node_modules/aws-xray-sdk-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-2.5.0.tgz", + "integrity": "sha512-qe60bv0kn5KY6gAIF88TPCOIdu/A3dTmcKISj+kE4OH02eF6kMm1ctL7OgoBAasnsDNSn0VMLhIaA1izgoWuxA==", + "dependencies": { + "@types/continuation-local-storage": "*", + "atomic-batcher": "^1.0.2", + "aws-sdk": "^2.304.0", + "continuation-local-storage": "^3.2.0", + "date-fns": "^1.29.0", + "pkginfo": "^0.4.0", + "semver": "^5.3.0", + "winston": "^2.4.4" + }, + "engines": { + "node": ">= 4.x" + } + }, + "node_modules/aws-xray-sdk-express": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-2.5.0.tgz", + "integrity": "sha512-VfUXlxFlI+gr6ImMF+3000fqPRTBS9MbAywdtC8dt/U57WQbLFDjPW+V6oJowTwrkgKwpOKSXncQDfBs8QHvIw==", + "dependencies": { + "@types/express": "*" + }, + "engines": { + "node": ">= 4.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^2.5.0" + } + }, + "node_modules/aws-xray-sdk-mysql": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-2.5.0.tgz", + "integrity": "sha512-OI3cDkVcKTiWytwoOE1Oj0D2UbchOVHkiQNXWktDk9QYzqbOz+GNEwD5QneqyxFu0z0bQieClBM+0okUprFBXQ==", + "dependencies": { + "@types/mysql": "*" + }, + "engines": { + "node": ">= 4.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^2.5.0" + } + }, + "node_modules/aws-xray-sdk-postgres": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-2.5.0.tgz", + "integrity": "sha512-8LcXTjr272gKMSg9a+QSGQPjAabQb87SA0c4ZlVcPqzoG7nAd3pULR6/HDtujeukbRAb6rEoxzKvPX0s18NyFw==", + "dependencies": { + "@types/pg": "*" + }, + "engines": { + "node": ">= 4.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^2.5.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "dependencies": { + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" + } + }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, + "node_modules/dynamodb-data-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", + "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=", + "bin": { + "dynamo-dt-attr-unwrap": "bin/unwrap.js", + "dynamo-dt-attr-wrap": "bin/wrap.js" + } + }, + "node_modules/emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "dependencies": { + "shimmer": "^1.2.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/winston": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", + "dependencies": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "@types/body-parser": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", + "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "requires": { + "@types/node": "*" + } + }, + "@types/continuation-local-storage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.2.tgz", + "integrity": "sha512-aItm+aYPJ4rT1cHmAxO+OdWjSviQ9iB5UKb5f0Uvgln0N4hS2mcDodHtPiqicYBXViUYhqyBjhA5uyOcT+S34Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", + "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz", + "integrity": "sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw==", + "requires": { + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + }, + "@types/mysql": { + "version": "2.15.8", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", + "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", + "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==" + }, + "@types/pg": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", + "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", + "requires": { + "@types/node": "*", + "@types/pg-types": "*" + } + }, + "@types/pg-types": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz", + "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", + "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "requires": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" + } + }, + "atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" + }, + "aws-sdk": { + "version": "2.599.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", + "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "aws-xray-sdk": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-2.5.0.tgz", + "integrity": "sha512-KBTF9QUq0zu24t+gFh3VATYDNx295VzZUUjpZ1OmIEbcs3Zqmox5L6VAqjCgGfJeLaCUAWPLkduxau3LuDpqcw==", + "requires": { + "aws-xray-sdk-core": "^2.5.0", + "aws-xray-sdk-express": "^2.5.0", + "aws-xray-sdk-mysql": "^2.5.0", + "aws-xray-sdk-postgres": "^2.5.0", + "pkginfo": "^0.4.0" + } + }, + "aws-xray-sdk-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-2.5.0.tgz", + "integrity": "sha512-qe60bv0kn5KY6gAIF88TPCOIdu/A3dTmcKISj+kE4OH02eF6kMm1ctL7OgoBAasnsDNSn0VMLhIaA1izgoWuxA==", + "requires": { + "@types/continuation-local-storage": "*", + "atomic-batcher": "^1.0.2", + "aws-sdk": "^2.304.0", + "continuation-local-storage": "^3.2.0", + "date-fns": "^1.29.0", + "pkginfo": "^0.4.0", + "semver": "^5.3.0", + "winston": "^2.4.4" + } + }, + "aws-xray-sdk-express": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-2.5.0.tgz", + "integrity": "sha512-VfUXlxFlI+gr6ImMF+3000fqPRTBS9MbAywdtC8dt/U57WQbLFDjPW+V6oJowTwrkgKwpOKSXncQDfBs8QHvIw==", + "requires": { + "@types/express": "*" + } + }, + "aws-xray-sdk-mysql": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-2.5.0.tgz", + "integrity": "sha512-OI3cDkVcKTiWytwoOE1Oj0D2UbchOVHkiQNXWktDk9QYzqbOz+GNEwD5QneqyxFu0z0bQieClBM+0okUprFBXQ==", + "requires": { + "@types/mysql": "*" + } + }, + "aws-xray-sdk-postgres": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-2.5.0.tgz", + "integrity": "sha512-8LcXTjr272gKMSg9a+QSGQPjAabQb87SA0c4ZlVcPqzoG7nAd3pULR6/HDtujeukbRAb6rEoxzKvPX0s18NyFw==", + "requires": { + "@types/pg": "*" + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + }, + "continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "requires": { + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" + } + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + }, + "dynamodb-data-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", + "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=" + }, + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "requires": { + "shimmer": "^1.2.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "winston": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/terraform/lambda_functions/spot_monitor/package.json b/lambda_functions/spot_monitor/package.json similarity index 100% rename from terraform/lambda_functions/spot_monitor/package.json rename to lambda_functions/spot_monitor/package.json diff --git a/terraform/lambda_functions/status_reporter/main.js b/lambda_functions/status_reporter/main.js similarity index 87% rename from terraform/lambda_functions/status_reporter/main.js rename to lambda_functions/status_reporter/main.js index 1645258..5108348 100644 --- a/terraform/lambda_functions/status_reporter/main.js +++ b/lambda_functions/status_reporter/main.js @@ -8,7 +8,6 @@ var aws = require('aws-sdk'); var uuid = require('uuid/v4'); var ddbTypes = require('dynamodb-data-types').AttributeValue; var settings = JSON.parse(JSON.stringify(process.env)); -settings.availabilityZones = JSON.parse(settings.availabilityZones); var cb = ""; var lambdaEvent = {}; @@ -17,7 +16,7 @@ aws.config.apiVersions = { dynamodb: '2012-08-10' }; -aws.config.update({region: 'us-west-2'}); +aws.config.update({region: settings.region}); var db = new aws.DynamoDB(); @@ -70,6 +69,19 @@ function editCampaign(entity, rangeKey, values) { function putStatusReport(user, campaign, node, stats) { + let campaignKey = [ + "campaigns", + campaign + ].join(':'); + + let setHashes = editCampaign(user, campaignKey, { + hashes: stats.hashes + }).then(function(data) { + return respond(201, {campaign: campaign, node: node, time: lambdaEvent.requestContext.requestTimeEpoch}, true); + }, function (err) { + return respond(500, "Failed to post update; " + err, false); + }); + var rangeKey = [ campaign, "nodes", @@ -77,11 +89,12 @@ function putStatusReport(user, campaign, node, stats) { (lambdaEvent.requestContext.requestTimeEpoch / 1000).toFixed(0) ].join(':'); - editCampaign(user, rangeKey, { + let status = editCampaign(user, rangeKey, { startTime: stats.startTime, estimatedEndTime: stats.estimatedEndTime, hashRate: stats.hashRate, progress: stats.progress, + hashes: stats.hashes, recoveredHashes: stats.recoveredHashes, rejectedPercentage: stats.rejectedPercentage, performance: stats.performance, @@ -91,6 +104,8 @@ function putStatusReport(user, campaign, node, stats) { }, function (err) { return respond(500, "Failed to post update; " + err, false); }); + + return Promise.all([setHashes, status]); } function putNode(user, campaign, node, body) { @@ -113,12 +128,14 @@ function putNode(user, campaign, node, body) { eventType: "NodeFinished", status: 'COMPLETED', progress: 100, - recoveredHashes: body.recoveredHashes + recoveredHashes: body.recoveredHashes, + startTime: (lambdaEvent.requestContext.requestTimeEpoch / 1000).toFixed(0) }; } else { params = { eventType: "NodeFinished", - status: 'ERROR' + status: 'ERROR', + startTime: (lambdaEvent.requestContext.requestTimeEpoch / 1000).toFixed(0) }; } @@ -146,6 +163,7 @@ function processHttpRequest(path, method, entity, body) { estimatedEndTime: 0, hashRate: 0, progress: 0, + hashes: 0, recoveredHashes: 0, rejectedPercentage: 0, performance: 0 diff --git a/lambda_functions/status_reporter/package-lock.json b/lambda_functions/status_reporter/package-lock.json new file mode 100644 index 0000000..f6539e9 --- /dev/null +++ b/lambda_functions/status_reporter/package-lock.json @@ -0,0 +1,243 @@ +{ + "name": "status_reporter", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "status_reporter", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.599.0", + "dynamodb-data-types": "^3.0.1", + "uuid": "^3.3.2" + } + }, + "node_modules/aws-sdk": { + "version": "2.599.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", + "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", + "dependencies": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/dynamodb-data-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", + "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=", + "bin": { + "dynamo-dt-attr-unwrap": "bin/unwrap.js", + "dynamo-dt-attr-wrap": "bin/wrap.js" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "aws-sdk": { + "version": "2.599.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", + "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "dynamodb-data-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", + "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/terraform/lambda_functions/status_reporter/package.json b/lambda_functions/status_reporter/package.json similarity index 100% rename from terraform/lambda_functions/status_reporter/package.json rename to lambda_functions/status_reporter/package.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d3e5746 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3526 @@ +{ + "name": "npk_community", + "version": "2.6.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "npk_community", + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "@c6fc/sonnetry": "^3.1.2", + "aws-sdk": "^2.1018.0", + "inquirer": "^8.2.0", + "yargs": "^17.3.1" + }, + "engines": { + "node": ">=17.0.1", + "npm": ">=8.1.0" + } + }, + "node_modules/@c6fc/sonnetry": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@c6fc/sonnetry/-/sonnetry-3.1.2.tgz", + "integrity": "sha512-zDufFEgKpxdj09S2PsWuX7DJP9xCYl8SntXFkz9JOUk+/6sbyaItnlORpU2W46eTGX4QSH6O9w//OpMH2SfwZw==", + "dependencies": { + "@c6fc/terraform": "^0.0.4", + "@hanazuki/node-jsonnet": "^0.4.2", + "aws-sdk": "^2.1032.0", + "ini": "^2.0.0", + "yargs": "^17.2.1" + }, + "bin": { + "sonnetry": "bin/sonnetry.js" + } + }, + "node_modules/@c6fc/terraform": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@c6fc/terraform/-/terraform-0.0.4.tgz", + "integrity": "sha512-o2U2VR3Wj+ysLitFSGd+Vz+9sFtqzEaJZLkD8Dyfec3rj9PonbiyI9qTczh+YkaN613dEITtRs3I+YRcWK4jlw==", + "dependencies": { + "axios": "^1.1.3", + "find-cache-dir": "^3.3.2", + "unzip-stream": "^0.3.1" + }, + "bin": { + "terraform": "bin/index.js" + } + }, + "node_modules/@c6fc/terraform/node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@hanazuki/node-jsonnet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@hanazuki/node-jsonnet/-/node-jsonnet-0.4.2.tgz", + "integrity": "sha512-9vYfzSF58YD6zuFb9rcAdhed6URCMY1HMPYdcx3ESaXbcbC/vDw/TGllcmj6bR683HyPx0MtZaOmxJkU2X8oBQ==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "cmake-js": "^6.1.0", + "node-addon-api": "^3.1.0" + }, + "engines": { + "node": "^10.20.0 || ^12.17.0 || >=14" + }, + "peerDependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "peer": true + }, + "node_modules/ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/are-we-there-yet": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", + "integrity": "sha1-otKMkxAqpsyWJFomy5VN4G7FPww=", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1372.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1372.0.tgz", + "integrity": "sha512-SkpBohTXS7yJL6I/k+Dk5o2k8xgyVKs1n9zo08DvCaheSmvpMKQHqdj/wCbf1cjLRFr/Ckc1YGDj3SsikPsBgw==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cmake-js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-6.3.0.tgz", + "integrity": "sha512-1uqTOmFt6BIqKlrX+39/aewU/JVhyZWDqwAL+6psToUwxj3yWPJiwxiZFmV0XdcoWmqGs7peZTxTbJtAcH8hxw==", + "dependencies": { + "axios": "^0.21.1", + "debug": "^4", + "fs-extra": "^5.0.0", + "is-iojs": "^1.0.1", + "lodash": "^4", + "memory-stream": "0", + "npmlog": "^1.2.0", + "rc": "^1.2.7", + "semver": "^5.0.3", + "splitargs": "0", + "tar": "^4", + "unzipper": "^0.8.13", + "url-join": "0", + "which": "^1.0.9", + "yargs": "^3.6.0" + }, + "bin": { + "cmake-js": "bin/cmake-js" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cmake-js/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmake-js/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/cmake-js/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmake-js/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmake-js/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmake-js/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmake-js/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/cmake-js/node_modules/yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dependencies": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "dependencies": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-iojs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", + "integrity": "sha1-TBEDO11dlNbqs3dd7cm+fQCDJfE=" + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "node_modules/lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memory-stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", + "integrity": "sha1-6+jdHDuLw4wOeUHp3dWuvmtN6D8=", + "dependencies": { + "readable-stream": "~1.0.26-2" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node_modules/npmlog": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", + "integrity": "sha1-KOe+YZYJtT960d0wChDWTXFiaLY=", + "dependencies": { + "ansi": "~0.3.0", + "are-we-there-yet": "~1.0.0", + "gauge": "~1.2.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/splitargs": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", + "integrity": "sha1-/p965lc3GzOxDLgNoUPPgknPazs=" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unzip-stream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.1.tgz", + "integrity": "sha512-RzaGXLNt+CW+T41h1zl6pGz3EaeVhYlK+rdAap+7DxW5kqsqePO8kRtWPaCiVqdhZc86EctSPVYNix30YOMzmw==", + "dependencies": { + "binary": "^0.3.0", + "mkdirp": "^0.5.1" + } + }, + "node_modules/unzipper": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", + "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.1.5", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/unzipper/node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dependencies": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@c6fc/sonnetry": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@c6fc/sonnetry/-/sonnetry-3.1.2.tgz", + "integrity": "sha512-zDufFEgKpxdj09S2PsWuX7DJP9xCYl8SntXFkz9JOUk+/6sbyaItnlORpU2W46eTGX4QSH6O9w//OpMH2SfwZw==", + "requires": { + "@c6fc/terraform": "^0.0.4", + "@hanazuki/node-jsonnet": "^0.4.2", + "aws-sdk": "^2.1032.0", + "ini": "^2.0.0", + "yargs": "^17.2.1" + } + }, + "@c6fc/terraform": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@c6fc/terraform/-/terraform-0.0.4.tgz", + "integrity": "sha512-o2U2VR3Wj+ysLitFSGd+Vz+9sFtqzEaJZLkD8Dyfec3rj9PonbiyI9qTczh+YkaN613dEITtRs3I+YRcWK4jlw==", + "requires": { + "axios": "^1.1.3", + "find-cache-dir": "^3.3.2", + "unzip-stream": "^0.3.1" + }, + "dependencies": { + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + } + } + }, + "@hanazuki/node-jsonnet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@hanazuki/node-jsonnet/-/node-jsonnet-0.4.2.tgz", + "integrity": "sha512-9vYfzSF58YD6zuFb9rcAdhed6URCMY1HMPYdcx3ESaXbcbC/vDw/TGllcmj6bR683HyPx0MtZaOmxJkU2X8oBQ==", + "requires": { + "bindings": "^1.5.0", + "cmake-js": "^6.1.0", + "node-addon-api": "^3.1.0" + } + }, + "@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "peer": true + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "are-we-there-yet": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", + "integrity": "sha1-otKMkxAqpsyWJFomy5VN4G7FPww=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "aws-sdk": { + "version": "2.1372.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1372.0.tgz", + "integrity": "sha512-SkpBohTXS7yJL6I/k+Dk5o2k8xgyVKs1n9zo08DvCaheSmvpMKQHqdj/wCbf1cjLRFr/Ckc1YGDj3SsikPsBgw==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.5.0" + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "cmake-js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-6.3.0.tgz", + "integrity": "sha512-1uqTOmFt6BIqKlrX+39/aewU/JVhyZWDqwAL+6psToUwxj3yWPJiwxiZFmV0XdcoWmqGs7peZTxTbJtAcH8hxw==", + "requires": { + "axios": "^0.21.1", + "debug": "^4", + "fs-extra": "^5.0.0", + "is-iojs": "^1.0.1", + "lodash": "^4", + "memory-stream": "0", + "npmlog": "^1.2.0", + "rc": "^1.2.7", + "semver": "^5.0.3", + "splitargs": "0", + "tar": "^4", + "unzipper": "^0.8.13", + "url-join": "0", + "which": "^1.0.9", + "yargs": "^3.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + }, + "inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-iojs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", + "integrity": "sha1-TBEDO11dlNbqs3dd7cm+fQCDJfE=" + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "memory-stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", + "integrity": "sha1-6+jdHDuLw4wOeUHp3dWuvmtN6D8=", + "requires": { + "readable-stream": "~1.0.26-2" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "npmlog": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", + "integrity": "sha1-KOe+YZYJtT960d0wChDWTXFiaLY=", + "requires": { + "ansi": "~0.3.0", + "are-we-there-yet": "~1.0.0", + "gauge": "~1.2.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + } + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "splitargs": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", + "integrity": "sha1-/p965lc3GzOxDLgNoUPPgknPazs=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unzip-stream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.1.tgz", + "integrity": "sha512-RzaGXLNt+CW+T41h1zl6pGz3EaeVhYlK+rdAap+7DxW5kqsqePO8kRtWPaCiVqdhZc86EctSPVYNix30YOMzmw==", + "requires": { + "binary": "^0.3.0", + "mkdirp": "^0.5.1" + } + }, + "unzipper": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", + "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.1.5", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + } + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6208f06 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "npk_community", + "version": "2.6.0", + "description": "NPK distributed hash cracking platform", + "main": "bin/index.js", + "scripts": { + "deploy": "node bin/index.js deploy", + "configure": "node bin/index.js deploy -i", + "update": "node bin/index.js deploy", + "destroy": "node bin/index.js destroy" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/c6fc/npk.git" + }, + "engines": { + "node": ">=17.0.1", + "npm": ">=8.1.0" + }, + "author": "brad@bradwoodward.io", + "license": "MIT", + "bugs": { + "url": "https://github.com/c6fc/npk/issues" + }, + "homepage": "https://github.com/c6fc/npk#readme", + "dependencies": { + "@c6fc/sonnetry": "^3.1.2", + "aws-sdk": "^2.1018.0", + "inquirer": "^8.2.0", + "yargs": "^17.3.1" + } +} diff --git a/readme-content/cognitoCreateUser.png b/readme-content/cognitoCreateUser.png deleted file mode 100644 index 537345e..0000000 Binary files a/readme-content/cognitoCreateUser.png and /dev/null differ diff --git a/readme-content/cognitoCreateUserDialog.png b/readme-content/cognitoCreateUserDialog.png deleted file mode 100644 index 4120fbf..0000000 Binary files a/readme-content/cognitoCreateUserDialog.png and /dev/null differ diff --git a/readme-content/cognitoUserPools.png b/readme-content/cognitoUserPools.png deleted file mode 100644 index c853092..0000000 Binary files a/readme-content/cognitoUserPools.png and /dev/null differ diff --git a/readme-content/coverage.png b/readme-content/coverage.png deleted file mode 100644 index f14d439..0000000 Binary files a/readme-content/coverage.png and /dev/null differ diff --git a/readme-content/dashboard-active.png b/readme-content/dashboard-active.png deleted file mode 100644 index dab4716..0000000 Binary files a/readme-content/dashboard-active.png and /dev/null differ diff --git a/readme-content/dashboard.png b/readme-content/dashboard.png deleted file mode 100644 index bce48f8..0000000 Binary files a/readme-content/dashboard.png and /dev/null differ diff --git a/readme-content/fileManagement.png b/readme-content/fileManagement.png deleted file mode 100644 index a0ce2e5..0000000 Binary files a/readme-content/fileManagement.png and /dev/null differ diff --git a/readme-content/hostedZone.png b/readme-content/hostedZone.png deleted file mode 100644 index d8cd92b..0000000 Binary files a/readme-content/hostedZone.png and /dev/null differ diff --git a/readme-content/hostedZoneSettings.png b/readme-content/hostedZoneSettings.png deleted file mode 100644 index 8f0b03c..0000000 Binary files a/readme-content/hostedZoneSettings.png and /dev/null differ diff --git a/readme-content/limitIncreaseRequest.png b/readme-content/limitIncreaseRequest.png deleted file mode 100644 index d5f83e3..0000000 Binary files a/readme-content/limitIncreaseRequest.png and /dev/null differ diff --git a/readme-content/manualCommands.png b/readme-content/manualCommands.png deleted file mode 100644 index 6f8138a..0000000 Binary files a/readme-content/manualCommands.png and /dev/null differ diff --git a/readme-content/newUser.png b/readme-content/newUser.png deleted file mode 100644 index 6b0f7e6..0000000 Binary files a/readme-content/newUser.png and /dev/null differ diff --git a/readme-content/npk-invite.png b/readme-content/npk-invite.png deleted file mode 100644 index 4434a9c..0000000 Binary files a/readme-content/npk-invite.png and /dev/null differ diff --git a/readme-content/order-preview.png b/readme-content/order-preview.png deleted file mode 100644 index 1b5ee3a..0000000 Binary files a/readme-content/order-preview.png and /dev/null differ diff --git a/readme-content/userManagement.png b/readme-content/userManagement.png deleted file mode 100644 index db896d6..0000000 Binary files a/readme-content/userManagement.png and /dev/null differ diff --git a/readme-content/userTools.png b/readme-content/userTools.png deleted file mode 100644 index d96c110..0000000 Binary files a/readme-content/userTools.png and /dev/null differ diff --git a/site-content/angular/angular.min.js b/site-content/angular/angular.min.js old mode 100755 new mode 100644 diff --git a/site-content/angular/app.js b/site-content/angular/app.js old mode 100755 new mode 100644 index 72ca39f..aefa21b --- a/site-content/angular/app.js +++ b/site-content/angular/app.js @@ -5,6 +5,12 @@ angular return JSON.stringify(what, null, ' ').trim(); }; }) + .filter('fieldMemberOf', function() { + return function(source, field, mask) { + return source + .filter(e => mask.includes(e[field])); + } + }) .filter('equals', function() { return function(items, equals) { if (typeof items != "object") { @@ -59,6 +65,18 @@ angular return result; }; }) + .filter('toArray', function() { + return function(object) { + const newObject = Object.keys(object).reduce((acc, cur) => { + object[cur]._id = cur; + acc.push(object[cur]); + + return acc; + }, []); + + return newObject; + } + }) .filter('toHs', function() { return function(number) { @@ -209,6 +227,13 @@ angular return cognito.routeRequireLogin(); }] }) + .when('/file-management/:basePath*', { + templateUrl: "views/file-management.html", + controller: "filesCtrl", + resolveRedirectTo: ['cognito', function(cognito) { + return cognito.routeRequireLogin(); + }] + }) .when('/campaign-management', { templateUrl: "views/campaign-management.html", controller: "cmCtrl", @@ -244,14 +269,20 @@ angular return cognito.routeRequireAdmin(); }] }) - - /* - .when('/:realm/:name', { - templateUrl: "profile.html", - controller: "profileCtrl", - controllerAs: "pCtrl" + .when('/dictionaries', { + templateUrl: "views/dictionary-management.html", + controller: "dmCtrl", + resolveRedirectTo: ['cognito', function(cognito) { + return cognito.routeRequireAdmin(); + }] + }) + .when('/quota', { + templateUrl: "views/quota.html", + controller: "htCtrl", + resolveRedirectTo: ['cognito', function(cognito) { + return cognito.routeRequireAdmin(); + }] }) - */ .otherwise({ redirectTo: "/", diff --git a/site-content/angular/controllers/npkMainCtrl.js b/site-content/angular/controllers/npkMainCtrl.js old mode 100755 new mode 100644 index 0172766..3f50d9a --- a/site-content/angular/controllers/npkMainCtrl.js +++ b/site-content/angular/controllers/npkMainCtrl.js @@ -48,9 +48,9 @@ angular $scope.settings = result; - $scope.settings.admin.favoriteHashTypes = $scope.settings.admin.favoriteHashTypes || []; + /*$scope.settings.admin.favoriteHashTypes = $scope.settings.admin.favoriteHashTypes || []; $scope.settings.self.favoriteHashTypes = $scope.settings.self.favoriteHashTypes || []; - $scope.settings.favoriteHashTypes = [].concat($scope.settings.self.favoriteHashTypes).concat($scope.settings.admin.favoriteHashTypes); + $scope.settings.favoriteHashTypes = [].concat($scope.settings.self.favoriteHashTypes).concat($scope.settings.admin.favoriteHashTypes);*/ // console.log(pricingSvc.hashTypes.$dirty); @@ -252,7 +252,7 @@ angular $scope.confirmpassword; $scope.verificationcode; - $scope.useSamlSSO = (SAMLSSO.useSamlSSO == "1"); + $scope.useSamlSSO = (SAMLSSO.useSamlSSO == "true"); if ($scope.useSamlSSO == true) { $scope.samlSSOURL = "https://" + SAMLSSO.SAMLDomain + "/oauth2/authorize?identity_provider=" + SAMLSSO.SAMLIdp + "&redirect_uri=" + SAMLSSO.SAMLRedirectUrl + "&response_type=CODE&client_id=" + COGNITO_CONFIG.ClientId + "&scope=email%20openid" } @@ -447,7 +447,9 @@ angular var promises = []; $scope.active_campaigns = 0; $scope.inactive_campaigns = 0; - Object.keys(data).forEach(function (e) { + Object.keys(data) + .filter(e => !data[e].deleted) + .forEach(function (e) { $scope.campaigns.totals.hashes += $scope.campaigns[e].hashes; $scope.active_campaigns += ((data[e].active) ? 1 : 0); $scope.inactive_campaigns += ((!data[e].active) ? 1 : 0); @@ -580,6 +582,9 @@ angular $('a#start-' + campaign_id).hide(); $('img#action-' + campaign_id).show(); + $scope.modalMessages.error = []; + $scope.modalMessages.success = []; + params = { method: 'PUT', url: 'https://' + APIGATEWAY_URL + '/v1/userproxy/campaign/' + campaign_id, @@ -607,6 +612,10 @@ angular $scope.$digest(); $('#messageModal').modal('show'); + + $timeout(function() { + $scope.populateDashboard() + }, 2000); // location.href = location.href.split('#')[0]; }).fail(function(xhr, a, b) { @@ -628,6 +637,8 @@ angular $scope.$digest(); $('#messageModal').modal('show'); + $('img#action-' + campaign_id).hide(); + $('a#start-' + campaign_id).show(); }); }; @@ -650,9 +661,10 @@ angular }); }]) - .controller('campaignCtrl', ['$scope', '$routeParams', '$timeout', 'pricingSvc', 'DICTIONARY_BUCKETS', 'USERDATA_BUCKET', 'APIGATEWAY_URL', 'QUOTAS', function($scope, $routeParams, $timeout, pricingSvc, DICTIONARY_BUCKETS, USERDATA_BUCKET, APIGATEWAY_URL, QUOTAS) { + .controller('campaignCtrl', ['$scope', '$routeParams', '$timeout', 'pricingSvc', 'DICTIONARY_BUCKET', 'USERDATA_BUCKET', 'APIGATEWAY_URL', 'QUOTAS', 'FAMILIES', 'FAMILYREGIONS', function($scope, $routeParams, $timeout, pricingSvc, DICTIONARY_BUCKET, USERDATA_BUCKET, APIGATEWAY_URL, QUOTAS, FAMILIES, FAMILYREGIONS) { $scope.pricingSvc = pricingSvc; + pricingSvc.gpuSpeeds = pricingSvc.gpuWordlistSpeeds; // window.campaignCtrl = $scope; $scope.hashType = 1000; @@ -662,8 +674,9 @@ angular $scope.bestPrice = null; $scope.idealInstance = 'none'; - $scope.selectedInstance = 'none'; + $scope.selectedFamily = false; $scope.selectedRegion = false; + $scope.selectedInstance = false; $scope.forceRegion = false; $scope.rulesFiles = {Contents: [{Key: 0, Name: 'Select an Instance'}]}; @@ -676,26 +689,15 @@ angular $scope.upload_ready = true; $scope.uploading_hashes = false; - $scope.uploadProgress = 30; + $scope.uploadProgress = 0; $scope.upload_finished = false; - $scope.idealInstances = { - "g3": { - instanceType: "?", - price: 0, - az: '' - }, - "p2": { - instanceType: "?", - price: 0, - az: '' - }, - "p3": { - instanceType: "?", - price: 0, - az: '' - } - }; + $scope.familySortOrder = 'effectiveness'; + + $scope.instanceOptions = []; + + $scope.families = FAMILIES; + $scope.familyRegions = FAMILYREGIONS; // $scope.instances = {}; @@ -703,99 +705,99 @@ angular $scope.showAdvanced = $('#use_advanced').prop('checked'); } - $scope.pickForcedRegion = function(region) { - $scope.forceRegion = ($scope.forceRegion == region) ? false : region; - $scope.selectedInstance = 'none'; + $scope.selectFamily = function(instance) { + $scope.selectedFamily = instance; - $scope.processInstancePrices(); - }; + $scope.selectedRegion = false; + } - $scope.pricesLoaded = false; - $scope.getLowestPrice = function(list) { + $scope.selectRegion = function(region) { + $scope.selectedRegion = region; - var promises = []; + $scope.selectedInstance = false; + } - Object.keys(list).forEach(function(e) { - promises.push($scope.pricingSvc.getSpotPriceHistory(e, $scope.forceRegion)); - }); + $scope.selectInstance = function(instance) { + $scope.selectedInstance = instance; - return Promise.all(promises).then((data) => { - $scope.pricesLoaded = true; + $scope.updateTotalKeyspace(); + $scope.buildSliders(); + } - var result = { - cheapestRegion: '', - cheapestType: '', - price: null, - gpus: 0 - }; + $scope.setFamilySortOrder = function(method) { + $scope.familySortOrder = method; + } - Object.keys(data).forEach(function(i) { - if (data[i].price == null) { - return false; - } + $scope.settingOptions = false - if ($scope.forceRegion !== false && data[i].price == null) { - return false; - } + $scope.getInstanceOptions = async function() { + if ($scope.settingOptions) { + return false; + } - // Skip instances too large for our deployment. - if ($scope.quotaFor(data[i].instanceType) == 0) { - return result; - } + $scope.settingOptions = true; + $scope.instanceOptions = []; - if (data[i].price == 0) { - return result; - } + await Promise.all(Object.keys(FAMILIES).map(async (gpu) => { + + pricingSvc.getFamilySpotPriceHistory(gpu).then((data) => { + + if (data[gpu].length > 0) { + const cheapest = data[gpu].reduce((cheapest, option) => { + option.instances.forEach(instance => { + if (cheapest == 0 || instance.price < cheapest) { + cheapest = instance.price; + } + }); + + return cheapest; + }, 0); + + const effectiveness = (!pricingSvc.gpuSpeeds?.[gpu]?.[$scope.hashType] || !cheapest) ? + 0 : pricingSvc.gpuSpeeds[gpu][$scope.hashType] / cheapest; + + $scope.instanceOptions.push({ + gpu, + cost: data[gpu], + performance: pricingSvc.gpuSpeeds?.[gpu]?.[$scope.hashType] ?? 0, + cheapest, + effectiveness + }); + + $scope.$digest(); + $scope.pricesLoaded = true; - // TODO: Switch '<' at 551:115 to '>' to pick bigger instances. - // Is better if cheaper or same price with more GPUs - if ((data[i].price / list[data[i].instanceType]) < result.price || - ((data[i].price / list[data[i].instanceType]) < (result.price + 0.01) && list[data[i].instanceType] < result.gpus) || - result.price == null) { - result = { - cheapestRegion: data[i].cheapestRegion, - cheapestType: data[i].instanceType, - price: (data[i].price / list[data[i].instanceType]), - gpus: list[data[i].instanceType] - }; } }); + })); - return result; - }).catch((err) => { - console.trace(err); - }); - - return success(result); + $scope.settingOptions = false; }; - $scope.$watch('selectedRegion', function() { - if ($scope.selectedRegion != false) { - $scope.rules_loading = true; - $scope.wordlist_loading = true; + $scope.pricesLoaded = false; + $scope.rules_loading = true; + $scope.wordlist_loading = true; - $scope.$parent.npkDB.listBucketContents(DICTIONARY_BUCKETS[$scope.selectedRegion], "rules/", $scope.selectedRegion).then((data) => { - Object.keys(data.Contents).forEach(function (e) { - data.Contents[e].Name = data.Contents[e].Key.split('/')[1].split('.').slice(0, -1).join('.'); - }); + $scope.$parent.npkDB.listBucketContents(DICTIONARY_BUCKET.name, "rules/", DICTIONARY_BUCKET.region).then((data) => { + Object.keys(data.Contents).forEach(function (e) { + data.Contents[e].Name = data.Contents[e].Key.split('/')[1].split('.').slice(0, -1).join('.'); + }); - $scope.rulesFiles = data; - $scope.rules_loading = false; - $scope.$digest(); - $('#rules_select').multiSelect('refresh'); - }); + $scope.rulesFiles = data; + $scope.rules_loading = false; + $scope.$digest(); + $('#rules_select').multiSelect('refresh'); + }); - $scope.$parent.npkDB.listBucketContents(DICTIONARY_BUCKETS[$scope.selectedRegion], "wordlist/", $scope.selectedRegion).then((data) => { - Object.keys(data.Contents).forEach(function (e) { - data.Contents[e].Name = data.Contents[e].Key.split('/')[1].split('.').slice(0, -1).join('.'); - }); + $scope.$parent.npkDB.listBucketContents(DICTIONARY_BUCKET.name, "wordlist/", DICTIONARY_BUCKET.region).then((data) => { + Object.keys(data.Contents).forEach(function (e) { + data.Contents[e].Name = data.Contents[e].Key.split('/')[1].split('.').slice(0, -1).join('.'); + }); - $scope.wordlistFiles = data; - $scope.wordlist_loading = false; - $scope.$digest(); - // $('#wordlist_select').multiSelect('refresh'); - }); - } + $scope.wordlistFiles = data; + $scope.wordlist_loading = false; + $scope.$digest(); + // $('#wordlist_select').multiSelect('refresh'); }); $scope.$watch('selectedInstance', function() { @@ -814,60 +816,12 @@ angular return result; }; -/* $scope.updateInstances = function() { - var empty = { - hashes: "-", - hashprice: "?" - }; - - ['g3', 'p2', 'p3'].forEach(function(e) { - if ($scope.hashType == null) { - $scope.instances[e] = empty; - } - - var price = 0; - if (typeof $scope.pricingSvc[e] == "undefined" || typeof $scope.pricingSvc[e][$scope.hashType] == "undefined") { - - $scope.instances[e] = empty; - - return true; - } - - $scope.instances[e] = { - hashes: $scope.pricingSvc[e][$scope.hashType] - }; - }); - };*/ - - $scope.selectedAZ = ""; - $scope.pickInstance = function(which) { - $scope.selectedInstance = which.instanceType; - $scope.selectedInstanceGeneration = which.instanceType.slice(0, 2); - $scope.selectedRegion = which.az.slice(0, -1); - $scope.selectedAZ = which.az; - - $scope.totalPrice = $scope.pricingSvc.spotPrice[$scope.selectedInstance].price * $scope.instanceCount * $scope.instanceDuration; - $scope.updateTotalKeyspace(); - }; - - $scope.pickInstanceFromSpot = function(type) { - var spot = $scope.pricingSvc.spotPrice[type]; - - $scope.selectedInstance = type; - $scope.selectedInstanceGeneration = type.slice(0, 2); - $scope.selectedRegion = spot.cheapestRegion.slice(0, -1); - $scope.selectedAZ = spot.cheapestRegion; - - $scope.totalPrice = spot.price * $scope.instanceCount * $scope.instanceDuration; - $scope.updateTotalKeyspace(); - }; - $scope.knownMetadata = {}; $scope.retrievingMetadata = 0; $scope.retrieveS3Metadata = function(bucket, key, region) { - bucket = (bucket == "self") ? USERDATA_BUCKET : bucket; - bucket = (bucket == "dict" && $scope.selectedRegion != "") ? DICTIONARY_BUCKETS[$scope.selectedRegion] : bucket; + bucket = (bucket == "self") ? USERDATA_BUCKET.name : bucket; + bucket = (bucket == "dict") ? DICTIONARY_BUCKET.name : bucket; if (typeof $scope.knownMetadata[bucket + ":" + key] != "undefined") { return new Promise((success, failure) => { @@ -890,6 +844,7 @@ angular $scope.use_wordlist = false; $scope.toggleWordlist = function() { + $('#use_wordlist').prop('checked', !$('#use_wordlist').prop('checked')) $scope.use_wordlist = $('#use_wordlist').prop('checked'); if ($scope.use_wordlist) { @@ -922,17 +877,24 @@ angular $scope.updateWordlistAttack(); }); + $scope.$watch('selectedInstance', function() { + $scope.updateWordlistAttack(); + }); + + $scope.$watch('use_wordlist', function() { + $scope.updateWordlistAttack(); + }); + $scope.$watch('selectedRules', function() { $scope.updateWordlistAttack(); }); $scope.$watch('hashType', function() { - // $scope.updateInstances(); - $scope.setIdealInstance(); + $scope.getInstanceOptions(); $scope.updateWordlistAttack(); - if ($scope.selectedInstance != "none") { - $scope.maskDuration = Math.floor($scope.maskKeyspace / $scope.pricingSvc[$scope.selectedInstanceGeneration][$scope.hashType] / $scope.gpus[$scope.selectedInstance]) + if ($scope.selectedInstance != "none" && !!$scope.selectedInstance) { + $scope.maskDuration = Math.floor($scope.maskKeyspace / (pricingSvc.gpuSpeeds?.[$scope.selectedFamily.gpu]?.[$scope.hashType] || 1) / FAMILIES[$scope.selectedFamily.gpu].instances[$scope.selectedInstance.instanceType][0]) } $scope.updateTotalKeyspace(); @@ -947,14 +909,15 @@ angular $scope.updateWordlistAttack = function() { var promises = []; $scope.selectedWordlist.forEach(function(e) { - promises.push($scope.retrieveS3Metadata('dict', e.Key, $scope.selectedRegion)); + promises.push($scope.retrieveS3Metadata('dict', e.Key, DICTIONARY_BUCKET.region)); }); $scope.selectedRules.forEach(function(e) { - promises.push($scope.retrieveS3Metadata('dict', e.Key, $scope.selectedRegion)); + promises.push($scope.retrieveS3Metadata('dict', e.Key, DICTIONARY_BUCKET.region)); }); - if ($scope.selectedInstance == "none") { + if (!$scope.selectedInstance) { + $scope.updateTotalKeyspace(); return Promise.resolve(true); } @@ -965,7 +928,7 @@ angular total: {keyspace: 0, size: 0, requiredDuration: 0} }; - bucket = DICTIONARY_BUCKETS[$scope.selectedRegion]; + bucket = DICTIONARY_BUCKET.name; $scope.selectedWordlist.forEach(function(e) { var metadata = $scope.knownMetadata[bucket + ":" + e.Key]; @@ -986,7 +949,7 @@ angular $scope.wordlistAttackStats.total.keyspace = $scope.wordlistAttackStats.wordlist.lines * $scope.wordlistAttackStats.rules.keyspace; $scope.wordlistAttackStats.total.size = $scope.wordlistAttackStats.wordlist.size + $scope.wordlistAttackStats.rules.size; - $scope.wordlistAttackStats.total.requiredDuration = Math.floor($scope.wordlistAttackStats.total.keyspace / $scope.pricingSvc[$scope.selectedInstanceGeneration][$scope.hashType] / $scope.gpus[$scope.selectedInstance]) + $scope.wordlistAttackStats.total.requiredDuration = Math.floor($scope.wordlistAttackStats.total.keyspace / (pricingSvc.gpuSpeeds?.[$scope.selectedFamily.gpu]?.[$scope.hashType] || 1) / FAMILIES[$scope.selectedFamily.gpu].instances[$scope.selectedInstance.instanceType][0]) $scope.$digest(); }); @@ -1012,10 +975,15 @@ angular $scope.totalKeyspace = 0; $scope.totalDuration = 0; $scope.updateTotalKeyspace = function() { - $scope.totalKeyspace = (($scope.use_mask) ? $scope.maskKeyspace : 1) * (($scope.use_wordlist) ? $scope.wordlistAttackStats.total.keyspace : 1); - $scope.totalDuration = $scope.totalKeyspace / (($scope.selectedInstance != "none") ? ($scope.gpus[$scope.selectedInstance] * ($scope.pricingSvc[$scope.selectedInstanceGeneration][$scope.hashType] /4)) : 1); - $scope.updateCoverage(); + if (!!$scope.selectedInstance) { + + $scope.totalKeyspace = (($scope.use_mask) ? $scope.maskKeyspace : 1) * (($scope.use_wordlist) ? $scope.wordlistAttackStats.total.keyspace : 1); + $scope.totalDuration = $scope.totalKeyspace / (($scope.selectedInstance != "none") ? (FAMILIES[$scope.selectedFamily.gpu].instances[$scope.selectedInstance.instanceType][0] * (pricingSvc.gpuSpeeds[$scope.selectedFamily.gpu][$scope.hashType])) : 1); + + $scope.updateCoverage(); + } + $scope.compileManualCommands(); if ($scope.useTargetOverride) { @@ -1066,11 +1034,12 @@ angular var countDuration = $scope.totalDuration / $scope.instanceCount; $scope.totalCoverage = (($scope.instanceDuration * 60 * 60) / countDuration) * 100; - $scope.totalPrice = $scope.pricingSvc.spotPrice[$scope.selectedInstance].price * $scope.instanceCount * $scope.instanceDuration; + $scope.totalPrice = $scope.selectedInstance.price * $scope.instanceCount * $scope.instanceDuration; }; $scope.use_mask = false; $scope.toggleMask = function() { + $('#use_mask').prop('checked', !$('#use_mask').prop('checked')); $scope.use_mask = $('#use_mask').prop('checked'); if ($scope.use_mask) { @@ -1084,9 +1053,12 @@ angular $('#maskConfig').css('opacity', 0.4); $('#maskConfig button').each(function(i, e) { $(e).prop('disabled', true)}); } + + $scope.updateTotalKeyspace(); }; $scope.toggleManual = function() { + $('#use_manual').prop('checked', !$('#use_manual').prop('checked')); $scope.use_manual = $('#use_manual').prop('checked'); if ($scope.use_manual) { @@ -1120,6 +1092,13 @@ angular $scope.$watch('attackType', function() { $scope.compileManualCommands(); + + pricingSvc.gpuSpeeds = pricingSvc.gpuWordlistSpeeds; + if ($scope.attackType == 3) { + pricingSvc.gpuSpeeds = pricingSvc.gpuMaskSpeeds; + } + + $scope.getInstanceOptions(); }); $scope.$watch('manual_arguments', function() { @@ -1150,6 +1129,7 @@ angular "./hashcat/hashcat.bin", "--quiet", "-O", + "-w", "4", "-m", $scope.hashType, @@ -1161,7 +1141,7 @@ angular $scope.selectedRules.forEach(function(e) { console.log(e); args.push("-r"); - args.push("rules/" + e.Key); + args.push(e.Key); }); } @@ -1171,7 +1151,7 @@ angular if ([0,6].indexOf($scope.attackType) >= 0) { $scope.selectedWordlist.forEach(function(f) { - args.push("wordlists/" + f.Key); + args.push(f.Key); }); } @@ -1240,8 +1220,8 @@ angular break; } - if ($scope.selectedInstance != "none") { - $scope.maskDuration = Math.floor($scope.maskKeyspace / $scope.pricingSvc[$scope.selectedInstanceGeneration][$scope.hashType] / $scope.gpus[$scope.selectedInstance]) + if ($scope.selectedInstance) { + $scope.maskDuration = Math.floor($scope.maskKeyspace / (pricingSvc.gpuSpeeds?.[$scope.selectedFamily.gpu]?.[$scope.hashType] || 1) / FAMILIES[$scope.selectedFamily.gpu].instances[$scope.selectedInstance.instanceType][0]) } $scope.mask += value; @@ -1265,61 +1245,36 @@ angular $scope.wordlistKeyspace = 0; - $scope.gpus = { - // "g3s.xlarge": 1, - "g3.4xlarge": 1, - "g3.8xlarge": 2, - "g3.16xlarge": 4, - "p2.xlarge": 1, - "p2.8xlarge": 8, - "p2.16xlarge": 16, - "p3.2xlarge": 1, - "p3.8xlarge": 4, - "p3.16xlarge": 8 - }; - - $scope.vcpus = { - "g3.4xlarge": 16, - "g3.8xlarge": 32, - "g3.16xlarge": 64, - "p2.xlarge": 4, - "p2.8xlarge": 32, - "p2.16xlarge": 64, - "p3.2xlarge": 8, - "p3.8xlarge": 32, - "p3.16xlarge": 64 - }; - - $scope.view_layout = { - "g3": ["g3.4xlarge", "g3.8xlarge", "g3.16xlarge"], - "p2": ["p2.xlarge", "p2.8xlarge", "p2.16xlarge"], - "p3": ["p3.2xlarge", "p3.8xlarge", "p3.16xlarge"] - }; + $scope.view_layout = QUOTAS; $scope.quotaFor = function(instanceType) { if (typeof instanceType == "undefined") { return false; } - switch (instanceType.split("")[0]) { - case 'g': - return Math.floor(QUOTAS.gQuota / $scope.vcpus[instanceType]); - break; + if (typeof instanceType == "n") { + return 0; + } - case 'p': - return Math.floor(QUOTAS.pQuota / $scope.vcpus[instanceType]); - break; + return Object.keys(FAMILIES).reduce((limit, gpu) => { + if (!FAMILIES[gpu].instances?.[instanceType]) return limit; - case 'n': // This is to match 'none'; - return 0; - break; - } + let cpus = FAMILIES[gpu].instances?.[instanceType][1]; + let code = FAMILIES[gpu].quotaCode; + limit = Object.keys(QUOTAS).reduce((acc, cur) => { + if (!QUOTAS[cur]?.[code]) return acc; + + acc[cur] = QUOTAS[cur]?.[code] + return acc; + }, {}); + + return limit; + }); } $scope.quotas = QUOTAS; $scope.uploadHashFile = function() { - var reader = new FileReader(); var file = $('#hashfile')[0].files[0]; if (!file) { @@ -1330,31 +1285,28 @@ angular $scope.uploading_hashes = true; $scope.$digest(); - reader.onloadend = function() { - var uploader = new AWS.S3.ManagedUpload({ - params: {Bucket: USERDATA_BUCKET, Key: AWS.config.credentials.identityId + "/uploads/" + file.name, Body: reader.result, ContentType: "text/plain"} - }) - .on('httpUploadProgress', function(evt) { - $scope.uploadProgress = Math.floor(evt.loaded / evt.total * 100); - $scope.$digest(); - }) - .send(function(err, result) { - if (err) { - console.log("Upload failed. " + err); - return false; - } - - console.log("Success"); - $scope.uploading_hashes = false; - $scope.upload_finished = true; - $scope.uploadedFile = file.name; - $scope.$digest(); + $('#textuploadbtn').hide(); + var uploader = new AWS.S3.ManagedUpload({ + params: {Bucket: USERDATA_BUCKET.name, Key: AWS.config.credentials.identityId + "/uploads/" + file.name, Body: file.slice(0, file.length), ContentType: "text/plain"} + }) + .on('httpUploadProgress', function(evt) { + $scope.uploadProgress = Math.floor(evt.loaded / file.size * 100); + $scope.$digest(); + }) + .send(function(err, result) { + if (err) { + console.log("Upload failed. " + err); + return false; + } - $scope.getHashFiles(); - }); - }; + console.log("Success"); + $scope.uploading_hashes = false; + $scope.upload_finished = true; + $scope.uploadedFile = file.name; + $scope.$digest(); - reader.readAsArrayBuffer(file); + $scope.getHashFiles(); + }); }; $scope.uploadHashText = function() { @@ -1370,9 +1322,10 @@ angular $scope.upload_ready = false; $scope.uploading_hashes = true; + $('#fileuploadbtn').hide(); var uploader = new AWS.S3.ManagedUpload({ - params: {Bucket: USERDATA_BUCKET, Key: AWS.config.credentials.identityId + "/uploads/" + filename, Body: body, ContentType: "text/plain"} + params: {Bucket: USERDATA_BUCKET.name, Key: AWS.config.credentials.identityId + "/uploads/" + filename, Body: body, ContentType: "text/plain"} }) .on('httpUploadProgress', function(evt) { $scope.uploadProgress = Math.floor(evt.loaded / evt.total * 100); @@ -1396,7 +1349,7 @@ angular $scope.uploadedFile = null; $scope.getHashFiles = function() { - $scope.$parent.npkDB.listBucketContents(USERDATA_BUCKET, "self/uploads/").then((data) => { + $scope.$parent.npkDB.listBucketContents(USERDATA_BUCKET.name, "self/uploads/", USERDATA_BUCKET.region).then((data) => { Object.keys(data.Contents).forEach(function (e) { if (data.Contents[e].Key.indexOf('.') > 0) { data.Contents[e].Name = data.Contents[e].Key.split('/')[2].split('.').slice(0, -1).join('.'); @@ -1422,7 +1375,7 @@ angular $scope.orderErrors = []; $scope.orderWarnings = []; - if ($scope.selectedInstance == "none") { + if (!$scope.selectedInstance) { $scope.orderErrors.push("Select an instance.") } @@ -1491,7 +1444,7 @@ angular } } - if ($scope.instanceCount < 1 || $scope.instanceCount > $scope.maxInstances) { + if ($scope.instanceCount < 1 || $scope.instanceCount > $scope.selectedInstance.limit) { $scope.orderErrors.push("Invalid instance count."); } @@ -1504,9 +1457,9 @@ angular } // TODO: Implement max price here. - if ($scope.totalPrice > 100) { - $scope.orderWarnings.push("Total price exceeds campaign limits. Your instances may terminate earlier than you intend."); - } + /*if ($scope.totalPrice > 100) { + $scope.orderWarnings.push(`Total price exceeds campaign limit of ${}. Your instances may terminate earlier than you intend.`); + }*/ if ($scope.orderErrors.length > 0) { $('#orderErrorModal').modal('show'); @@ -1515,9 +1468,8 @@ angular } $scope.order = { - region: $scope.selectedRegion, - availabilityZone: $scope.selectedAZ, - instanceType: $scope.selectedInstance, + region: $scope.selectedRegion.region, + instanceType: $scope.selectedInstance.instanceType, hashFile: $scope.selectedHashes[0].Key.split('/').slice(1).join('/'), hashFileUrl: "...", hashType: $scope.hashType, @@ -1546,7 +1498,7 @@ angular } $scope.$parent.npkDB.s3.getSignedUrl('getObject', { - Bucket: USERDATA_BUCKET, + Bucket: USERDATA_BUCKET.name, Key: AWS.config.credentials.identityId + '/' + $scope.order.hashFile, Expires: 3600 }, function(err, url) { @@ -1564,6 +1516,10 @@ angular $scope.orderResponse = {success: false}; $scope.submitOrder = function() { + $scope.orderErrors = []; + $scope.orderWarnings = []; + $scope.submittingOrder = true; + $('#orderModal').modal('hide'); $('#orderResponseModal').modal('show'); @@ -1582,8 +1538,9 @@ angular $scope.campaignId = data.campaignId; $scope.$digest(); - - }).fail((data) => { + }) + .fail((data) => { + $('#orderResponseModal').modal('hide'); $scope.submittingOrder = false; var response = {}; @@ -1594,7 +1551,6 @@ angular response = {msg: "Unable to parse response as JSON", success: false}; } - $('#orderResponseModal').modal('hide'); $scope.orderErrors = [response.msg]; $scope.orderWarnings = []; $scope.$digest(); @@ -1602,92 +1558,19 @@ angular }); } - $scope.processInstancePrices = function() { - $scope.cheapest_g3 = $scope.getLowestPrice({ - // "g3s.xlarge": 1, - "g3.4xlarge": 1, - "g3.8xlarge": 2, - "g3.16xlarge": 4 - }); - - $scope.cheapest_p2 = $scope.getLowestPrice({ - "p2.xlarge": 1, - "p2.8xlarge": 8, - "p2.16xlarge": 16 - }); - - $scope.cheapest_p3 = $scope.getLowestPrice({ - "p3.2xlarge": 1, - "p3.8xlarge": 4, - "p3.16xlarge": 8 - }); - - $scope.idealInstances = { - "g3": {}, - "p2": {}, - "p3": {} - } - - Promise.all([ - $scope.cheapest_g3, - $scope.cheapest_p2, - $scope.cheapest_p3 - ]).then((data) => { - $scope.idealInstances.g3 = { - instanceType: data[0].cheapestType, - price: data[0].price, - az: data[0].cheapestRegion - }; - - $scope.idealInstances.p2 = { - instanceType: data[1].cheapestType, - price: data[1].price, - az: data[1].cheapestRegion - }; - - $scope.idealInstances.p3 = { - instanceType: data[2].cheapestType, - price: data[2].price, - az: data[2].cheapestRegion - }; - - $scope.setIdealInstance(); - - $scope.$apply() - }).catch((err) => { - throw Error(err); - }); - } - - $scope.setIdealInstance = function() { - $scope.idealInstance = null; - ["g3", "p2", "p3"].forEach(function(e) { - $scope.idealInstances[e].pricePerformance = $scope.pricingSvc[e][$scope.hashType] / $scope.idealInstances[e].price; - - if (!$scope.idealInstances[e].price) { - return false; - } - - if ($scope.idealInstance == null || $scope.idealInstances[e].pricePerformance > $scope.idealInstances[$scope.idealInstance].pricePerformance) { - $scope.idealInstance = e; - } - }); - } - $scope.maxInstances = "0"; $scope.buildSliders = function() { - var maxInstances = $scope.quotaFor($scope.selectedInstance); + if (!$scope.selectedInstance) return false; - $scope.maxInstances = maxInstances; - if ($scope.instanceCount > $scope.maxInstances) { - $scope.instanceCount = $scope.maxInstances; + if ($scope.instanceCount > $scope.selectedInstance.limit) { + $scope.instanceCount = $scope.selectedInstance.limit; } - if (maxInstances > 0) { + if ($scope.selectedInstance.limit > 0) { $("#instance_count").data("ionRangeSlider").update({ min: 0, - max: maxInstances, + max: $scope.selectedInstance.limit, block: false }); } else { @@ -1696,7 +1579,7 @@ angular max: 0, block: true }); - } + } }; $scope.onReady = function() { @@ -1707,7 +1590,7 @@ angular $scope.toggleWordlist(); $scope.toggleManual(); - $scope.processInstancePrices(); + $scope.getInstanceOptions(); $scope.getHashFiles(); @@ -1750,14 +1633,14 @@ angular $scope.onReady(); }); }]) - .controller('filesCtrl', ['$scope', '$routeParams', '$location', 'USERDATA_BUCKET', function($scope, $routeParams, $location, USERDATA_BUCKET) { + .controller('filesCtrl', ['$scope', '$timeout', '$routeParams', '$location', 'USERDATA_BUCKET', function($scope, $timeout, $routeParams, $location, USERDATA_BUCKET) { $scope.files = {}; + $scope.basePath = ""; $scope.pathTree = {}; - $scope.files_loading = false; + $scope.files_loading = true; $scope.populateFiles = function() { - $scope.files_loading = true; - $scope.$parent.npkDB.listBucketContents(USERDATA_BUCKET, "self/").then((data) => { + $scope.$parent.npkDB.listBucketContents(USERDATA_BUCKET.name, "self/" + $scope.basePath, USERDATA_BUCKET.region).then((data) => { Object.keys(data.Contents).forEach(function (e) { $scope.files[data.Contents[e].Key] = data.Contents[e]; }); @@ -1768,6 +1651,63 @@ angular }); } + $scope.large_file_uploading = false; + $scope.largeFileSubmit = function() { + $scope.large_file_uploading = true; + + var filename = $('#largeFileInput').val().split('\\').slice(-1)[0]; + var key = AWS.config.credentials.identityId + "/uploads/" + filename + $scope.watchForFile(key); + } + + $scope.delay = function(t, v) { + return new Promise(function(resolve) { + setTimeout(resolve.bind(null, v), t) + }); + } + + $scope.watchForFile = function(key) { + return new Promise((success, failure) => { + if (Object.keys($scope.files).indexOf(key) < 0) { + $scope.populateFiles(); + + return $scope.delay(1000).then(() => $scope.watchForFile(key)); + } + + $scope.large_file_uploading = false; + $scope.$digest(); + + return success(true); + }); + } + + + $scope.generatePresignedPost = function() { + + var s3 = new AWS.S3({ region: USERDATA_BUCKET.region }); + var filename = $('#largeFileInput').val().split('\\').slice(-1)[0]; + var key = AWS.config.credentials.identityId + "/uploads/" + filename + + s3.createPresignedPost({ + Bucket: USERDATA_BUCKET.name, + Fields: { + key: key + }, + ContentType: "text/plain" + }, (err, data) => { + $('form#largeFile').attr('action', data.url); + + $('div#s3HiddenElems').empty(); + + data.fields['key'] = key; + Object.keys(data.fields).forEach((key) => { + $('div#s3HiddenElems').append(``); + }); + console.log(data); + $scope.$digest(); + }); + } + $scope.objLength = function(what) { if (typeof what == "undefined") { return 0; @@ -1779,7 +1719,7 @@ angular $scope.deleteS3Item = function(key) { console.log(key); $scope.$parent.npkDB.s3.deleteObject({ - Bucket: USERDATA_BUCKET, + Bucket: USERDATA_BUCKET.name, Key: key }, function(err, data) { if (err) { @@ -1818,15 +1758,21 @@ angular $scope.signedUrlOf = function(file) { return $scope.$parent.npkDB.getSignedUrl('getObject', { - Bucket: USERDATA_BUCKET, + Bucket: USERDATA_BUCKET.name, Key: file, ResponseContentType: "text/plain" }); } $scope.onReady = function() { - $scope.$parent.startApp(); - $scope.populateFiles(); + $scope.$parent.startApp(); + + if (!!$routeParams.basePath) { + $scope.basePath = $routeParams.basePath; + console.log($scope.basePath); + } + + $scope.populateFiles(); }; $scope.$on('$routeChangeSuccess', function() { @@ -1834,7 +1780,7 @@ angular $scope.onReady(); }); }]) - .controller('cmCtrl', ['$scope', '$routeParams', '$location', 'USERDATA_BUCKET', 'pricingSvc', function($scope, $routeParams, $location, USERDATA_BUCKET, pricingSvc) { + .controller('cmCtrl', ['$scope', '$routeParams', '$location', 'USERDATA_BUCKET', 'pricingSvc', 'FAMILIES', function($scope, $routeParams, $location, USERDATA_BUCKET, pricingSvc, FAMILIES) { $scope.data = {}; $scope.campaigns = {}; @@ -1846,13 +1792,19 @@ angular $scope.selected_campaign = null; $scope.manifest = {}; - $scope.gpus = pricingSvc.gpus; + $scope.gpus = Object.keys(FAMILIES).reduce((gpus, family) => { + const instances = Object.keys(FAMILIES[family].instances).forEach((instance) => { + let [gpu, vcpu] = FAMILIES[family].instances[instance]; - $scope.gpuNames = { - "G3": "Tesla M60", - "P2": "Tesla K80", - "P3": "Tesla V100" - }; + gpus[instance] = { + gpu, + vcpu, + family + }; + }); + + return gpus; + }, {}); // Apply the tooltips after campaigns are loaded. $scope.$watch('campaigns_loaded', function() { @@ -1888,6 +1840,11 @@ angular $scope.$parent.npkDB.select('self:campaigns:' + campaign, 'Campaigns').then((data) => { Object.keys(data).forEach(function(e) { campaigns[e].base = data[e]; + + if (!Array.isArray(campaigns?.[e]?.base?.spotRequestHistory)) { + return false; + } + campaigns[e].base.spotRequestHistory.forEach(function(h) { if (h.EventInformation.EventSubType == "launched" || h.EventInformation.EventSubType == "terminated") { h.EventInformation.EventDescription = JSON.parse(h.EventInformation.EventDescription); @@ -2007,7 +1964,7 @@ angular $scope.getManifest = function(campaign) { - $scope.$parent.npkDB.getObject(USERDATA_BUCKET, "self/campaigns/" + campaign + "/manifest.json").then((data) => { + $scope.$parent.npkDB.getObject(USERDATA_BUCKET.name, "self/campaigns/" + campaign + "/manifest.json", USERDATA_BUCKET.region).then((data) => { try { $scope.manifest = JSON.parse(data.Body.toString('ascii')); } catch (e) { @@ -2054,10 +2011,10 @@ angular $scope.availableSettings = { admin: { - "favoriteHashTypes": "array" + // "favoriteHashTypes": "array" }, self: { - "favoriteHashTypes": "array", + // "favoriteHashTypes": "array", "notificationsRead": "number" }, }; @@ -2413,4 +2370,272 @@ angular $scope.onReady(); }); }]) + .controller('dmCtrl', ['$scope', '$timeout', '$routeParams', '$location', 'DICTIONARY_BUCKET', function($scope, $timeout, $routeParams, $location, DICTIONARY_BUCKET) { + + $scope.files = {}; + $scope.basePath = ""; + $scope.pathTree = {}; + $scope.files_loading = true; + $scope.knownMetadata = {}; + $scope.populateFiles = function() { + $scope.$parent.npkDB.listBucketContents(DICTIONARY_BUCKET.name, "", DICTIONARY_BUCKET.region).then((data) => { + $scope.files = {}; + Object.keys(data.Contents).forEach(function (e) { + $scope.files[data.Contents[e].Key] = data.Contents[e]; + $scope.files[data.Contents[e].Key].metadata = {}; + $scope.retrieveS3Metadata(DICTIONARY_BUCKET.name, data.Contents[e].Key, DICTIONARY_BUCKET.region).then((metadata) => { + console.log(metadata); + $scope.files[data.Contents[e].Key].metadata = metadata; + $scope.$digest(); + }); + }); + + $scope.pathTree = $scope.getPathTree(Object.keys($scope.files)); + + $scope.files_loading = false; + $scope.$digest(); + }); + } + + $scope.retrieveS3Metadata = function(bucket, key, region) { + + bucket = (bucket == "self") ? USERDATA_BUCKET.name : bucket; + bucket = (bucket == "dict") ? DICTIONARY_BUCKET.name : bucket; + + if (typeof $scope.knownMetadata[bucket + ":" + key] != "undefined") { + return new Promise((success, failure) => { + success($scope.knownMetadata[bucket + ":" + key]); + }); + } + + $scope.retrievingMetadata++; + + return new Promise((success, failure) => { + $scope.$parent.npkDB.headObject(bucket, key, region).then((data) => { + $scope.knownMetadata[bucket + ":" + key] = data.Metadata; + + $scope.retrievingMetadata--; + + return success(data.Metadata); + }); + }); + } + + $scope.large_file_uploading = false; + $scope.largeFileSubmit = function() { + $scope.large_file_uploading = true; + + var filename = $('#largeFileInput').val().split('\\').slice(-1)[0]; + var key = `to_process/${$scope.type}/${filename}`; + $scope.watchForFile(key); + } + + $scope.delay = function(t, v) { + return new Promise(function(resolve) { + setTimeout(resolve.bind(null, v), t) + }); + } + + $scope.watchToProcess = function() { + if (!!$scope.pathTree.to_process) { + $scope.populateFiles(); + } + + $scope.delay(3000).then(() => $scope.watchToProcess()); + } + + $scope.watchToProcess(); + + $scope.watchForFile = function(key) { + return new Promise((success, failure) => { + if (Object.keys($scope.files).indexOf(key) < 0) { + $scope.populateFiles(); + + return $scope.delay(1000).then(() => $scope.watchForFile(key)); + } + + $scope.large_file_uploading = false; + $scope.$digest() + + return success(true); + }); + } + + $scope.generatePresignedPost = function() { + + var s3 = new AWS.S3({ region: DICTIONARY_BUCKET.region }); + var filename = $('#largeFileInput').val()?.split('\\')?.slice(-1)?.[0]; + + if (!filename || !$scope.type) { + return false; + } + + var key = `to_process/${$scope.type}/${filename}`; + + s3.createPresignedPost({ + Bucket: DICTIONARY_BUCKET.name, + Fields: { + key: key + }, + ContentType: "text/plain" + }, (err, data) => { + $('form#largeFile').attr('action', data.url); + + $('div#s3HiddenElems').empty(); + + data.fields['key'] = key; + Object.keys(data.fields).forEach((key) => { + $('div#s3HiddenElems').append(``); + }); + console.log(data); + }); + } + + $scope.upload_ready = true; + $scope.uploading_hashes = false; + $scope.uploadProgress = 0; + $scope.upload_finished = false; + + $scope.uploadFile = function(type) { + var reader = new FileReader(); + var file = $(`#${type}file`)[0].files[0]; + + if (!file) { + return false; + } + + $scope.upload_ready = false; + $scope.uploading_hashes = true; + $scope.$digest(); + + const btnToHide = (type == "wordlist") ? "#rulesupload" : "#wordlistupload"; + $(btnToHide).hide(); + + var uploader = new AWS.S3.ManagedUpload({ + params: {Bucket: DICTIONARY_BUCKET.name, Key: `to_process/${type}/${file.name}`, Body: file.slice(0, file.length), ContentType: file.type} + }) + .on('httpUploadProgress', function(evt) { + $scope.uploadProgress = Math.floor(evt.loaded / file.size * 100); + $scope.$digest(); + }) + .send(function(err, result) { + if (err) { + console.log("Upload failed. " + err); + return false; + } + + console.log("Success"); + $scope.uploading_hashes = false; + $scope.upload_finished = true; + $scope.uploadedFile = file.name; + $scope.populateFiles(); + + $timeout(() => { + $(btnToHide).show(); + $scope.upload_finished = false; + $scope.upload_ready = true; + }, 3000); + + }); + }; + + $scope.type = undefined; + + $scope.objLength = function(what) { + if (typeof what == "undefined") { + return 0; + } + + return Object.keys(what).length; + }; + + $scope.olderThan = function (date, seconds) { + return (date.getTime() < Date.now() - (seconds * 1000)); + }; + + $scope.deleteS3Item = function(key) { + console.log(key); + $scope.$parent.npkDB.s3.deleteObject({ + Bucket: DICTIONARY_BUCKET.name, + Key: key + }, function(err, data) { + if (err) { + console.log(err); + } else { + delete $scope.files[key]; + $scope.populateFiles(); + $scope.$digest(); + } + }); + }; + + $scope.getPathTree = function(paths) { + var pathTree = {}; + paths.forEach(path => { + var levels = path.split("/"); + var file = levels.pop(); + + levels.reduce((prev, lvl, i) => { + if (levels.length - i - 1) { + return prev[lvl] = prev[lvl] || {}; + } else { + var tmp = (prev[lvl] || {}); + tmp[file] = path; + return prev[lvl] = tmp; + } + }, pathTree); + }); + + return pathTree; + } + + $scope.typeOf = function(what) { + return typeof what; + } + + $scope.signedUrlOf = function(file) { + return $scope.$parent.npkDB.getSignedUrl('getObject', { + Bucket: DICTIONARY_BUCKET.name, + Key: file, + ResponseContentType: "text/plain" + }); + } + + $scope.onReady = function() { + $scope.$parent.startApp(); + + if (!!$routeParams.basePath) { + $scope.basePath = $routeParams.basePath; + console.log($scope.basePath); + } + + $scope.populateFiles(); + }; + + $scope.$on('$routeChangeSuccess', function() { + + $scope.onReady(); + }); + }]).controller('htCtrl', ['$scope', '$timeout', '$routeParams', '$location', 'DICTIONARY_BUCKET', 'QUOTAS', 'FAMILIES', 'FAMILYREGIONS', 'REGIONS', function($scope, $timeout, $routeParams, $location, DICTIONARY_BUCKET, QUOTAS, FAMILIES, FAMILYREGIONS, REGIONS) { + + $scope.loading = false; + $scope.quotas = QUOTAS; + $scope.families = FAMILIES; + $scope.familyregions = FAMILYREGIONS; + $scope.all_regions = Object.keys(REGIONS); + + $scope.onReady = function() { + $scope.$parent.startApp(); + + if (!!$routeParams.basePath) { + $scope.basePath = $routeParams.basePath; + console.log($scope.basePath); + } + }; + + $scope.$on('$routeChangeSuccess', function() { + + $scope.onReady(); + }); + }]) ; \ No newline at end of file diff --git a/site-content/angular/providers/cognitoProvider.js b/site-content/angular/providers/cognitoProvider.js index 6f9ef3d..2589ae5 100644 --- a/site-content/angular/providers/cognitoProvider.js +++ b/site-content/angular/providers/cognitoProvider.js @@ -29,6 +29,11 @@ angular return false; } + // If the identity type is SAML, the 'payload' object is merged into the parent 'idToken'. + if (!this.cognitoUserSession.idToken.hasOwnProperty('payload')) { + return this.cognitoUserSession.idToken['cognito:groups'].indexOf('npk-admins') > -1; + } + return this.cognitoUserSession.idToken.payload['cognito:groups'].indexOf('npk-admins') > -1; }, diff --git a/site-content/angular/services/npkDB.js b/site-content/angular/services/npkDB.js index bdb7960..fcd47c6 100644 --- a/site-content/angular/services/npkDB.js +++ b/site-content/angular/services/npkDB.js @@ -1,25 +1,13 @@ angular .module('app') - .service('npkDB', ['cognito', 'APIGATEWAY_URL', function(cognitoSvc, APIGATEWAY_URL) { + .service('npkDB', ['cognito', 'APIGATEWAY_URL', 'USERDATA_BUCKET', function(cognitoSvc, APIGATEWAY_URL, USERDATA_BUCKET) { return { - ddb: {}, - s3: {}, - s3w1: {}, - s3w2: {}, - s3e1: {}, - s3e2: {}, - init: function() { this.ddb = new AWS.DynamoDB({ apiVersion: '2012-10-08' }); - this.s3 = new AWS.S3(); - this.s3w1 = new AWS.S3({region: 'us-west-1'}); - this.s3w2 = new AWS.S3({region: 'us-west-2'}); - this.s3e1 = new AWS.S3({region: 'us-east-1'}); - this.s3e2 = new AWS.S3({region: 'us-east-2'}); - + this.s3 = new AWS.S3({region: USERDATA_BUCKET.region}); }, create: function(table,record) { @@ -40,11 +28,14 @@ angular }, get: function(table, key) { - var self = this; + + const ddb = new AWS.DynamoDB({ + apiVersion: '2012-10-08' + }); return new Promise((success, failure) => { // TODO: figure out why this is PUT - self.ddb.putItem({ + ddb.putItem({ TableName: table, Item: record }, function(err, data) { @@ -58,7 +49,10 @@ angular }, putSetting: function(compound_key, value) { - var self = this; + + const ddb = new AWS.DynamoDB({ + apiVersion: '2012-10-08' + }); var keys = compound_key.split(":"); switch (keys[0]) { @@ -77,7 +71,7 @@ angular - return self.ddb.putItem({ + return ddb.putItem({ TableName: 'Settings', Item: AWS.DynamoDB.Converter.marshall({ userid: owner, @@ -92,10 +86,12 @@ angular }, query: function(params) { - var self = this; + const ddb = new AWS.DynamoDB({ + apiVersion: '2012-10-08' + }); return new Promise((success, failure) => { - self.ddb.query(params, function(err, data) { + ddb.query(params, function(err, data) { if (err) { return failure(err); } @@ -178,37 +174,9 @@ angular }); }, - s3ForRegion: function(region) { - switch(region) { - case null: - return 's3' - break; - - case 'us-west-1': - return 's3w1' - break; - - case 'us-west-2': - return 's3w2' - break; - - case 'us-east-1': - return 's3e1' - break; - - case 'us-east-2': - return 's3e2' - break; - - default: - return 's3'; - break; - } - }, - listBucketContents: function(bucket, path, region) { - var self = this; + const s3 = new AWS.S3({ region }); path = path.replace('self', AWS.config.credentials.identityId); @@ -219,7 +187,7 @@ angular }; return new Promise((success, failure) => { - self[self.s3ForRegion(region)].listObjects(params, function(err, data) { + s3.listObjects(params, function(err, data) { if (err) { return failure(err); } @@ -231,7 +199,7 @@ angular getObject: function(bucket, key, region) { - var self = this; + const s3 = new AWS.S3({ region }); key = key.replace('self', AWS.config.credentials.identityId); @@ -241,7 +209,7 @@ angular }; return new Promise((success, failure) => { - self[self.s3ForRegion(region)].getObject(params, function(err, data) { + s3.getObject(params, function(err, data) { if (err) { return failure(err); } @@ -253,7 +221,7 @@ angular headObject: function(bucket, key, region) { - var self = this; + const s3 = new AWS.S3({ region }); key = key.replace('self', AWS.config.credentials.identityId); @@ -263,7 +231,7 @@ angular }; return new Promise((success, failure) => { - self[self.s3ForRegion(region)].headObject(params, function(err, data) { + s3.headObject(params, function(err, data) { if (err) { return failure(err); } @@ -287,6 +255,7 @@ angular cancelCampaign: function(campaign_id) { $('a#cancel-' + campaign_id).hide(); + $('a#delete-' + campaign_id).hide(); $('img#action-' + campaign_id).show(); params = { @@ -307,6 +276,26 @@ angular } location.href = location.href.split('#')[0]; + }).fail(function(xhr) { + + data = xhr.responseText; + + try { + data = JSON.parse(data); + } catch (e) { + data = {msg: "Error parsing response JSON.", success: false}; + } + + if (data.success == false) { + $scope.modalMessages.error = [data.msg]; + } else { + $scope.modalMessages.success = [data.msg]; + } + + $scope.$digest(); + + $('#messageModal').modal('show'); + $('img#action-' + campaign_id).hide(); }); }, diff --git a/site-content/angular/services/pricingSvc.js b/site-content/angular/services/pricingSvc.js index 0c9d2f8..ad1264d 100644 --- a/site-content/angular/services/pricingSvc.js +++ b/site-content/angular/services/pricingSvc.js @@ -1,115 +1,122 @@ angular .module('app') - .service('pricingSvc', [function() { + .service('pricingSvc', ['REGIONS', 'FAMILIES', 'QUOTAS', 'FAMILYREGIONS', function(REGIONS, FAMILIES, QUOTAS, FAMILYREGIONS) { return { hashTypes: {"MD5":0,"md5($pass.$salt)":10,"md5($salt.$pass)":20,"md5(utf16le($pass).$salt)":30,"md5($salt.utf16le($pass))":40,"HMAC-MD5 (key = $pass)":50,"HMAC-MD5 (key = $salt)":60,"SHA1":100,"sha1($pass.$salt)":110,"sha1($salt.$pass)":120,"sha1(utf16le($pass).$salt)":130,"sha1($salt.utf16le($pass))":140,"HMAC-SHA1 (key = $pass)":150,"HMAC-SHA1 (key = $salt)":160,"MySQL323":200,"MySQL4.1/MySQL5":300,"phpass, WordPress (MD5),":400,"phpass, phpBB3 (MD5)":400,"md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)":500,"Juniper IVE":501,"BLAKE2b-512":600,"MD4":900,"NTLM":1000,"Domain Cached Credentials (DCC), MS Cache":1100,"SHA-224":1300,"SHA-256":1400,"sha256($pass.$salt)":1410,"sha256($salt.$pass)":1420,"sha256(utf16le($pass).$salt)":1430,"sha256($salt.utf16le($pass))":1440,"HMAC-SHA256 (key = $pass)":1450,"HMAC-SHA256 (key = $salt)":1460,"descrypt, DES (Unix), Traditional DES":1500,"Apache $apr1$ MD5, md5apr1, MD5 (APR)":1600,"SHA-512":1700,"sha512($pass.$salt)":1710,"sha512($salt.$pass)":1720,"sha512(utf16le($pass).$salt)":1730,"sha512($salt.utf16le($pass))":1740,"HMAC-SHA512 (key = $pass)":1750,"HMAC-SHA512 (key = $salt)":1760,"sha512crypt $6$, SHA512 (Unix)":1800,"STDOUT":2000,"Domain Cached Credentials 2 (DCC2), MS Cache 2":2100,"Cisco-PIX MD5":2400,"Cisco-ASA MD5":2410,"WPA/WPA2":2500,"WPA/WPA2 PMK":2501,"md5(md5($pass))":2600,"LM":3000,"Oracle H: Type (Oracle 7+), DES(Oracle)":3100,"bcrypt $2*$, Blowfish (Unix)":3200,"md5($salt.md5($pass))":3710,"md5($salt.$pass.$salt)":3800,"md5(md5($pass).md5($salt))":3910,"md5($salt.md5($salt.$pass))":4010,"md5($salt.md5($pass.$salt))":4110,"md5(strtoupper(md5($pass)))":4300,"md5(sha1($pass))":4400,"sha1(sha1($pass))":4500,"sha1($salt.sha1($pass))":4520,"sha1(md5($pass))":4700,"sha1(md5($pass).$salt)":4710,"iSCSI CHAP authentication, MD5(CHAP)":4800,"sha1($salt.$pass.$salt)":4900,"Half MD5":5100,"Password Safe v3":5200,"IKE-PSK MD5":5300,"IKE-PSK SHA1":5400,"NetNTLMv1 / NetNTLMv1+ESS":5500,"NetNTLMv2":5600,"Cisco-IOS type 4 (SHA256)":5700,"Samsung Android Password/PIN":5800,"RIPEMD-160":6000,"Whirlpool":6100,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES":6211,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent":6211,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Twofish":6211,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES-Twofish":6212,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES-Twofish-Serpent":6213,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent-AES":6212,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent-Twofish-AES":6213,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Twofish-Serpent":6212,"TrueCrypt 5.0+ SHA512 + AES":6221,"TrueCrypt 5.0+ SHA512 + Serpent":6221,"TrueCrypt 5.0+ SHA512 + Twofish":6221,"TrueCrypt 5.0+ SHA512 + AES-Twofish":6222,"TrueCrypt 5.0+ SHA512 + AES-Twofish-Serpent":6223,"TrueCrypt 5.0+ SHA512 + Serpent-AES":6222,"TrueCrypt 5.0+ SHA512 + Serpent-Twofish-AES":6223,"TrueCrypt 5.0+ SHA512 + Twofish-Serpent":6222,"TrueCrypt 5.0+ Whirlpool + AES":6231,"TrueCrypt 5.0+ Whirlpool + Serpent":6231,"TrueCrypt 5.0+ Whirlpool + Twofish":6231,"TrueCrypt 5.0+ Whirlpool + AES-Twofish":6232,"TrueCrypt 5.0+ Whirlpool + AES-Twofish-Serpent":6233,"TrueCrypt 5.0+ Whirlpool + Serpent-AES":6232,"TrueCrypt 5.0+ Whirlpool + Serpent-Twofish-AES":6233,"TrueCrypt 5.0+ Whirlpool + Twofish-Serpent":6232,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES + boot":6241,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent + boot":6241,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Twofish + boot":6241,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES-Twofish + boot":6242,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + AES-Twofish-Serpent + boot":6243,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent-AES + boot":6242,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Serpent-Twofish-AES + boot":6243,"TrueCrypt 5.0+ PBKDF2-HMAC-RIPEMD160 + Twofish-Serpent + boot":6242,"AIX {smd5}":6300,"AIX {ssha256}":6400,"AIX {ssha512}":6500,"1Password, agilekeychain":6600,"AIX {ssha1}":6700,"LastPass + LastPass sniffed":6800,"GOST R 34.11-94":6900,"FortiGate (FortiOS)":7000,"OSX v10.8+ (PBKDF2-SHA512)":7100,"GRUB 2":7200,"IPMI2 RAKP HMAC-SHA1":7300,"sha256crypt $5$, SHA256 (Unix)":7400,"Kerberos 5 AS-REQ Pre-Auth etype 23":7500,"SAP CODVN B (BCODE)":7700,"SAP CODVN B (BCODE) mangled from":7701,"SAP CODVN F/G (PASSCODE)":7800,"SAP CODVN F/G (PASSCODE) mangled from":7801,"Drupal7":7900,"Sybase ASE":8000,"Citrix NetScaler":8100,"1Password, cloudkeychain":8200,"DNSSEC (NSEC3)":8300,"WBB3 (Woltlab Burning Board)":8400,"RACF":8500,"Lotus Notes/Domino 5":8600,"Lotus Notes/Domino 6":8700,"Android FDE <= 4.3":8800,"scrypt":8900,"Password Safe v2":9000,"Lotus Notes/Domino 8":9100,"Cisco-IOS $8$ (PBKDF2-SHA256)":9200,"Cisco-IOS $9$ (scrypt)":9300,"MS Office 2007":9400,"MS Office 2010":9500,"MS Office 2013":9600,"MS Office ⇐ 2003 MD5 + RC4, oldoffice$0, oldoffice$1":9700,"MS Office ⇐ 2003 $0/$1, MD5 + RC4, collider #1":9710,"MS Office ⇐ 2003 $0/$1, MD5 + RC4, collider #2":9720,"MS Office ⇐ 2003 SHA1 + RC4, oldoffice$3, oldoffice$4":9800,"MS Office ⇐ 2003 $3, SHA1 + RC4, collider #1":9810,"MS Office ⇐ 2003 $3, SHA1 + RC4, collider #2":9820,"Radmin2":9900,"Django (PBKDF2-SHA256)":10000,"SipHash":10100,"CRAM-MD5":10200,"SAP CODVN H (PWDSALTEDHASH) iSSHA-1":10300,"PDF 1.1 - 1.3 (Acrobat 2 - 4)":10400,"PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1":10410,"PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2":10420,"PDF 1.4 - 1.6 (Acrobat 5 - 8)":10500,"PDF 1.7 Level 3 (Acrobat 9)":10600,"PDF 1.7 Level 8 (Acrobat 10 - 11)":10700,"SHA-384":10800,"PBKDF2-HMAC-SHA256":10900,"PrestaShop":11000,"PostgreSQL CRAM (MD5)":11100,"MySQL CRAM (SHA1)":11200,"Bitcoin/Litecoin wallet.dat":11300,"SIP digest authentication (MD5)":11400,"CRC32":11500,"7-Zip":11600,"GOST R 34.11-2012 (Streebog) 256-bit":11700,"HMAC-Streebog-256 (key = $pass), big-endian":11750,"HMAC-Streebog-256 (key = $salt), big-endian":11760,"GOST R 34.11-2012 (Streebog) 512-bit":11800,"HMAC-Streebog-512 (key = $pass), big-endian":11850,"HMAC-Streebog-512 (key = $salt), big-endian":11860,"PBKDF2-HMAC-MD5":11900,"PBKDF2-HMAC-SHA1":12000,"PBKDF2-HMAC-SHA512":12100,"eCryptfs":12200,"Oracle T: Type (Oracle 12+)":12300,"BSDiCrypt, Extended DES":12400,"RAR3-hp":12500,"ColdFusion 10+":12600,"Blockchain, My Wallet":12700,"MS-AzureSync PBKDF2-HMAC-SHA256":12800,"Android FDE (Samsung DEK)":12900,"RAR5":13000,"Kerberos 5 TGS-REP etype 23":13100,"AxCrypt":13200,"AxCrypt in-memory SHA1":13300,"KeePass 1 AES / without keyfile":13400,"KeePass 2 AES / without keyfile":13400,"KeePass 1 Twofish / with keyfile":13400,"Keepass 2 AES / with keyfile":13400,"PeopleSoft PS_TOKEN":13500,"WinZip":13600,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + AES":13711,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + AES-Twofish":13712,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + Serpent":13711,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + Serpent-AES":13712,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + Serpent-Twofish-AES":13713,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + Twofish":13711,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + Twofish-Serpent":13712,"VeraCrypt PBKDF2-HMAC-SHA256 + AES":13751,"VeraCrypt PBKDF2-HMAC-SHA256 + AES-Twofish":13752,"VeraCrypt PBKDF2-HMAC-SHA256 + Serpent":13751,"VeraCrypt PBKDF2-HMAC-SHA256 + Serpent-AES":13752,"VeraCrypt PBKDF2-HMAC-SHA256 + Serpent-Twofish-AES":13753,"VeraCrypt PBKDF2-HMAC-SHA256 + Twofish":13751,"VeraCrypt PBKDF2-HMAC-SHA256 + Twofish-Serpent":13752,"VeraCrypt PBKDF2-HMAC-SHA512 + AES":13721,"VeraCrypt PBKDF2-HMAC-SHA512 + AES-Twofish":13722,"VeraCrypt PBKDF2-HMAC-SHA512 + Serpent":13721,"VeraCrypt PBKDF2-HMAC-SHA512 + Serpent-AES":13722,"VeraCrypt PBKDF2-HMAC-SHA512 + Serpent-Twofish-AES":13723,"VeraCrypt PBKDF2-HMAC-SHA512 + Twofish":13721,"VeraCrypt PBKDF2-HMAC-SHA512 + Twofish-Serpent":13722,"VeraCrypt PBKDF2-HMAC-Whirlpool + AES":13731,"VeraCrypt PBKDF2-HMAC-Whirlpool + AES-Twofish":13732,"VeraCrypt PBKDF2-HMAC-Whirlpool + Serpent":13731,"VeraCrypt PBKDF2-HMAC-Whirlpool + Serpent-AES":13732,"VeraCrypt PBKDF2-HMAC-Whirlpool + Serpent-Twofish-AES":13733,"VeraCrypt PBKDF2-HMAC-Whirlpool + Twofish":13731,"VeraCrypt PBKDF2-HMAC-Whirlpool + Twofish-Serpent":13732,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + boot-mode + AES":13741,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + boot-mode + AES-Twofish":13742,"VeraCrypt PBKDF2-HMAC-RIPEMD160 + boot-mode + AES-Twofish-Serpent":13743,"VeraCrypt PBKDF2-HMAC-SHA256 + boot-mode + Twofish":13761,"VeraCrypt PBKDF2-HMAC-SHA256 + boot-mode + Serpent-AES":13762,"VeraCrypt PBKDF2-HMAC-SHA256 + boot-mode + Serpent-Twofish-AES":13763,"VeraCrypt PBKDF2-HMAC-SHA256 + boot-mode + PIM + AES":13761,"VeraCrypt Streebog-512 + XTS 512 bit":13771,"VeraCrypt Streebog-512 + XTS 1024 bit":13772,"VeraCrypt Streebog-512 + XTS 1536 bit":13773,"Windows Phone 8+ PIN/password":13800,"OpenCart":13900,"DES (PT = $salt, key = $pass)":14000,"3DES (PT = $salt, key = $pass)":14100,"sha1(CX)":14400,"LUKS":14600,"iTunes backup < 10.0":14700,"iTunes backup >= 10.0":14800,"Skip32 (PT = $salt, key = $pass)":14900,"FileZilla Server >= 0.9.55":15000,"Juniper/NetBSD sha1crypt":15100,"Blockchain, My Wallet, V2":15200,"DPAPI master key file version 1 + local context":15300,"ChaCha20":15400,"JKS Java Key Store Private Keys (SHA1)":15500,"Ethereum Wallet, PBKDF2-HMAC-SHA256":15600,"Ethereum Wallet, SCRYPT":15700,"DPAPI master key file version 2 + Active Directory domain context":15900,"Tripcode":16000,"TACACS+":16100,"Apple Secure Notes":16200,"Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256":16300,"CRAM-MD5 Dovecot":16400,"JWT (JSON Web Token)":16500,"Electrum Wallet (Salt-Type 1-3)":16600,"FileVault 2":16700,"WPA-PMKID-PBKDF2":16800,"WPA-PMKID-PMK":16801,"Ansible Vault":16900,"PKZIP (Compressed)":17200,"PKZIP (Uncompressed)":17210,"PKZIP (Compressed Multi-File)":17220,"PKZIP (Mixed Multi-File)":17225,"PKZIP (Compressed Multi-File Checksum-Only)":17230,"SHA3-224":17300,"SHA3-256":17400,"SHA3-384":17500,"SHA3-512":17600,"Keccak-224":17700,"Keccak-256":17800,"Keccak-384":17900,"Keccak-512":18000,"TOTP (HMAC-SHA1)":18100,"Kerberos 5 AS-REP etype 23":18200,"Apple File System (APFS)":18300,"Open Document Format (ODF) 1.2 (SHA-256, AES)":18400,"sha1(md5(md5($pass)))":18500,"Open Document Format (ODF) 1.1 (SHA-1, Blowfish)":18600,"Java Object hashCode()":18700,"Blockchain, My Wallet, Second Password (SHA256)":18800,"Android Backup":18900,"QNX /etc/shadow (MD5)":19000,"QNX /etc/shadow (SHA256)":19100,"QNX /etc/shadow (SHA512)":19200,"sha1($salt1.$pass.$salt2)":19300,"Ruby on Rails Restful-Authentication":19500,"Kerberos 5 TGS-REP etype 17 (AES128-CTS-HMAC-SHA1-96)":19600,"Kerberos 5 TGS-REP etype 18 (AES256-CTS-HMAC-SHA1-96)":19700,"Kerberos 5, etype 17, Pre-Auth":19800,"Kerberos 5, etype 18, Pre-Auth":19900,"DiskCryptor SHA512 + XTS 512 bit (AES)":20011,"DiskCryptor SHA512 + XTS 512 bit (Twofish)":20011,"DiskCryptor SHA512 + XTS 512 bit (Serpent)":20011,"DiskCryptor SHA512 + XTS 1024 bit (AES-Twofish)":20012,"DiskCryptor SHA512 + XTS 1024 bit (Twofish-Serpent)":20012,"DiskCryptor SHA512 + XTS 1024 bit (Serpent-AES)":20012,"DiskCryptor SHA512 + XTS 1536 bit (AES-Twofish-Serpent)":20013,"Python passlib pbkdf2-sha512":20200,"Python passlib pbkdf2-sha256":20300,"Python passlib pbkdf2-sha1":20400,"PKZIP Master Key":20500,"PKZIP Master Key (6 byte optimization)":20510,"Oracle Transportation Management (SHA256)":20600,"sha256(sha256($pass).$salt)":20710,"sha256(md5($pass))":20800,"md5(sha1($pass).md5($pass).sha1($pass))":20900,"BitShares v0.x - sha512(sha512_bin(pass))":21000,"sha1(md5($pass.$salt))":21100,"md5(sha1($salt).md5($pass))":21200,"md5($salt.sha1($salt.$pass))":21300,"sha256(sha256_bin(pass))":21400,"SolarWinds Orion":21500,"Web2py pbkdf2-sha512":21600,"Electrum Wallet (Salt-Type 4)":21700,"Electrum Wallet (Salt-Type 5)":21800,"WPA-PBKDF2-PMKID+EAPOL":22000,"WPA-PMK-PMKID+EAPOL":22001,"BitLocker":22100,"Citrix NetScaler (SHA512)":22200,"sha256($salt.$pass.$salt)":22300,"AES Crypt (SHA256)":22400,"MultiBit Classic .key (MD5)":22500,"Telegram Desktop App Passcode (PBKDF2-HMAC-SHA1)":22600,"MultiBit HD (scrypt)":22700,"RSA/DSA/EC/OpenSSH Private Keys ($0$)":22911,"RSA/DSA/EC/OpenSSH Private Keys ($6$)":22921,"RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)":22931,"RSA/DSA/EC/OpenSSH Private Keys ($4$)":22941,"RSA/DSA/EC/OpenSSH Private Keys ($5$)":22951,"SecureZIP AES-128":23001,"SecureZIP AES-192":23002,"SecureZIP AES-256":23003,"Apple Keychain":23100,"XMPP SCRAM PBKDF2-SHA1":23200,"Apple iWork":23300,"Bitwarden":23400,"AxCrypt 2 AES-128":23500,"AxCrypt 2 AES-256":23600,"RAR3-p (Uncompressed)":23700,"RAR3-p (Compressed)":23800,"Plaintext":99999}, - p2: {"0":4539500000,"10":4518500000,"11":4253000000,"12":4247399999.9999995,"20":2942400000,"21":2930200000,"22":2918700000,"23":2938100000,"30":4405300000,"40":2900800000,"50":776300000,"60":1589600000,"100":1933100000,"101":1930100000,"110":1722600000,"111":1930700000,"112":1721200000,"120":1398200000,"121":1401000000,"122":1399400000,"124":1398800000,"125":1399400000,"130":1722100000,"131":1723200000,"132":1721200000,"133":1936100000,"140":1400500000,"141":1401500000,"150":361400000,"160":736300000,"200":15125100000,"300":788800000,"400":1477800,"500":2627800,"501":2582600,"600":620400000,"900":7241800000,"1000":7246200000,"1100":2223600000,"1300":777100000,"1400":789800000,"1410":784000000,"1411":788300000,"1420":724600000,"1421":723400000,"1430":783800000,"1440":724400000,"1441":724300000,"1450":136500000,"1460":317900000,"1500":155000000,"1600":2608700,"1700":249700000,"1710":250800000,"1711":250200000,"1720":239700000,"1722":239800000,"1730":250100000,"1731":250400000,"1740":239500000,"1750":49501300,"1760":105800000,"1800":34410,"2000":3491100000000,"2100":70474,"2400":3499800000,"2410":3239300000,"2500":86422,"2501":95703100,"2600":1318100000,"2611":1315200000,"2612":1315100000,"2711":920100000,"2811":972700000,"3000":3793800000,"3100":129199999.99999999,"3200":2569,"3710":1336600000,"3711":1300800000,"3800":2945500000,"3910":962800000,"4010":1263500000,"4110":1312800000,"4300":1426000000,"4400":941400000,"4500":697800000,"4520":418600000,"4521":418100000,"4522":631300000,"4700":974800000,"4710":888400000,"4711":888600000,"4800":3176600000,"4900":1400800000,"5100":3221800000,"5200":315100,"5300":178600000,"5400":80414700,"5500":4653300000,"5600":318900000,"5700":791100000,"5800":1256200,"6000":1169600000,"6100":119300000,"6211":69324,"6212":36546,"6213":25422,"6221":100600,"6222":45571,"6223":32476,"6231":13733,"6232":6734,"6233":4489,"6241":132900,"6242":68831,"6243":47367,"6300":2599600,"6400":4253700,"6500":1495900,"6600":725200,"6700":10739300,"6800":632500,"6900":72992000,"7000":1620500000,"7100":102600,"7200":102800,"7300":215100000,"7400":66154,"7401":62652,"7500":48393200,"7700":546600000,"7701":564200000,"7800":216700000,"7801":215400000,"7900":12598,"8000":86947200,"8100":1541100000,"8200":2609,"8300":658000000,"8400":272000000,"8500":668500000,"8600":64945700,"8700":12682900,"8800":177400,"8900":168400,"9000":54726,"9100":145700,"9200":14456,"9300":6303,"9400":29800,"9500":14892,"9600":2335,"9700":43137800,"9710":57677900,"9720":422200000,"9800":56979600,"9810":61798700,"9820":717900000,"9900":1702400000,"10000":28756,"10100":8564799999.999999,"10200":775500000,"10300":1165000,"10400":61378700,"10410":68319900,"10420":1540600000,"10500":2948900,"10600":789100000,"10700":14560,"10800":246400000,"10900":287300,"10901":35180,"11000":1821400000,"11100":1417400000,"11200":492300000,"11300":1188,"11400":610900000,"11500":2020500000,"11600":91675,"11700":19896700,"11750":5779400,"11760":7296400,"11800":19880400,"11850":4723700,"11860":6277000,"11900":1512300,"12000":719300,"12001":72544,"12100":103800,"12200":3629,"12300":25504,"12400":831500,"12500":10961,"12600":440400000,"12700":15318800,"12800":2881800,"12900":78068,"13000":9763,"13100":48421700,"13200":35780,"13300":1653200000,"13400":10896,"13500":1293800000,"13600":701900,"13711":216,"13712":122,"13713":83,"13721":205,"13722":97,"13723":64,"13731":29,"13732":12,"13733":8,"13741":432,"13742":244,"13743":163,"13751":298,"13752":150,"13753":98,"13761":744,"13762":376,"13763":245,"13771":10,"13772":5,"13773":3,"13800":183600000,"13900":425000000,"14000":3761100000,"14100":679900000,"14400":68880300,"14600":2089,"14700":35428,"14800":29,"14900":2332500000,"15000":222000000,"15100":36590,"15200":70033,"15300":14678,"15400":1100400000,"15500":1675500000,"15600":310500,"15700":0,"15900":8110,"16000":67804600,"16100":2962300000,"16200":15934,"16300":157600,"16400":4449100000,"16500":132400000,"16600":119700000,"16700":15915,"16800":86574,"16801":97018500,"16900":31919,"17200":637100000,"17210":341500000,"17220":1654200000,"17225":1881100000,"17230":2071300000.0000002,"17300":212100000,"17400":201600000,"17500":193600000,"17600":206800000,"17700":215100000,"17800":213700000,"17900":204900000,"18000":195100000,"18100":332000000,"18200":47935300,"18300":15923,"18400":3563,"18500":603400000,"18600":87814,"18700":46086300000,"18800":64508,"18900":35431,"19000":8762500,"19100":3534400,"19200":2102500,"19300":199100000,"19500":13820900,"19600":177500,"19700":85904,"19800":176200,"19900":86546,"20011":98787,"20012":45529,"20013":32512,"20200":4163,"20300":10007,"20400":5527,"20500":24583700000,"20510":4723300000,"20600":646900,"20710":141000000,"20711":141000000,"20800":587400000,"20900":533700000.00000006,"21000":102000000,"21100":973900000,"21200":1039099999.9999999,"21300":611500000,"21400":350500000,"21500":12360,"21600":103600,"21700":70285,"21800":71107,"22000":86123,"22001":84163200,"22100":330,"22200":240900000,"22300":706500000,"22301":706500000,"22400":66799,"22500":162500000,"22600":24887,"22700":22,"23001":186100000,"23002":118800000,"23003":103400000,"23100":346000,"23200":174300,"99999":7558600000}, - p3: {"0":55719700000,"10":55734900000,"11":54032400000,"12":54005000000,"20":29004200000,"21":28881200000,"22":28376600000,"23":28802100000,"30":55249300000,"40":28682100000,"50":8873800000,"60":19239200000,"100":17128800000,"101":17144800000,"110":17417500000,"111":17146900000.000002,"112":17415400000,"120":13227800000,"121":13228500000,"122":13223700000,"124":13223700000,"125":13225400000,"130":17415300000,"131":17415600000,"132":17416600000,"133":17144800000,"140":13221400000,"141":13216700000,"150":3423800000,"160":7240200000,"200":159500000000,"300":7384100000,"400":15173300,"500":25314400,"501":25307300,"600":4467400000,"900":82420300000,"1000":82509300000,"1100":23261900000,"1300":7424800000,"1400":7638500000,"1410":7653900000,"1411":7639200000,"1420":6761100000,"1421":6764300000,"1430":7656600000,"1440":6766000000,"1441":6765200000,"1450":1317200000,"1460":3125100000,"1500":1657900000,"1600":25296300,"1700":2391000000,"1710":2414000000,"1711":2393500000,"1720":2282100000,"1722":2283900000,"1730":2392900000,"1731":2393200000,"1740":2282700000,"1750":484600000,"1760":1023400000,"1800":386500,"2000":14528400000000,"2100":693200,"2400":40039800000,"2410":40782700000,"2500":850300,"2501":245900000,"2600":16062500000,"2611":16069000000,"2612":16070700000,"2711":11386200000,"2811":12348700000,"3000":39925100000,"3100":1189200000,"3200":80265,"3710":14891200000,"3711":14924100000,"3800":29926300000,"3910":11404100000,"4010":13236800000,"4110":14108300000,"4300":16071000000,"4400":9442700000,"4500":6668000000,"4520":4004700000,"4521":3997100000,"4522":6070500000,"4700":9673200000,"4710":9109700000,"4711":9110000000,"4800":37461900000,"4900":13030700000,"5100":35054400000,"5200":3055700,"5300":1950500000,"5400":790300000,"5500":45133800000,"5600":3722800000,"5700":7640700000,"5800":12102500,"6000":10268300000,"6100":1058400000.0000001,"6211":581900,"6212":354000,"6213":245200,"6221":908200,"6222":497500,"6223":329200,"6231":125400,"6232":63626,"6233":41194,"6241":1080600,"6242":566100,"6243":491200,"6300":25281000,"6400":40481300,"6500":14699100,"6600":6930300,"6700":89751600,"6800":6051100,"6900":779000000,"7000":15121500000,"7100":992500,"7200":992200,"7300":2136800000.0000002,"7400":654500,"7401":621800,"7500":999200000,"7700":3835700000,"7701":4006000000,"7800":2334400000,"7801":2338800000,"7900":130600,"8000":925500000,"8100":14727300000,"8200":25564,"8300":6334500000,"8400":2676900000,"8500":6026100000,"8600":721100000,"8700":237100000,"8800":1731700,"8900":1045000,"9000":1670700,"9100":1397000,"9200":145500,"9300":54371,"9400":285200,"9500":142600,"9600":22684,"9700":856100000,"9710":1223000000,"9720":4556700000,"9800":989800000,"9810":1295500000,"9820":7037600000,"9900":19774200000,"10000":291000,"10100":60967900000,"10200":8871200000,"10300":11619300,"10400":1293300000,"10410":1431200000,"10420":17111200000,"10500":61898000,"10600":7637800000,"10700":109000,"10800":2348000000,"10900":2846800,"10901":355200,"11000":21229200000,"11100":15740700000,"11200":4442400000,"11300":11158,"11400":7433500000,"11500":13800000000,"11600":746000,"11700":162500000,"11750":54100900,"11760":67235900,"11800":162400000,"11850":45288800,"11860":61035700,"11900":17388300,"12000":6872000,"12001":701900,"12100":1014100,"12200":34128,"12300":249000,"12400":6783700,"12500":102200,"12600":4209700000,"12700":103800000,"12800":27217200,"12900":752100,"13000":94055,"13100":977100000,"13200":367000,"13300":15954600000,"13400":111700,"13500":12321100000,"13600":6773100,"13711":1888,"13712":1073,"13713":741,"13721":2028,"13722":987,"13723":647,"13731":261,"13732":127,"13733":84,"13741":3769,"13742":2145,"13743":1484,"13751":2984,"13752":1461,"13753":961,"13761":7452,"13762":3652,"13763":2406,"13771":98,"13772":48,"13773":33,"13800":1726000000,"13900":4199600000.0000005,"14000":39894700000,"14100":6064500000,"14400":759100000,"14600":21460,"14700":348000,"14800":291,"14900":15557600000,"15000":2181900000,"15100":352300,"15200":702500,"15300":146900,"15400":7999700000,"15500":16452099999.999998,"15600":2949300,"15700":1,"15900":78965,"16000":555400000,"16100":30170700000,"16200":154700,"16300":1522000,"16400":55606900000,"16500":1350100000,"16600":1237800000,"16700":154700,"16800":850000,"16801":480900000,"16900":308500,"17200":5646300000,"17210":3514800000,"17220":13545200000,"17225":17398700000,"17230":21514700000,"17300":1715000000,"17400":1714700000,"17500":1714400000,"17600":1706600000,"17700":1715100000,"17800":1714600000,"17900":1714400000,"18000":1706600000,"18100":3285600000,"18200":979100000,"18300":154700,"18400":34828,"18500":6646400000,"18600":1954200,"18700":491700000000,"18800":629300,"18900":348300,"19000":65332800,"19100":29613400,"19200":15741200,"19300":2090400000,"19500":221100000,"19600":1708600,"19700":846100,"19800":1709900,"19900":848800,"20011":910300,"20012":495900,"20013":327600,"20200":40896,"20300":100400,"20400":53598,"20500":177600000000,"20510":43169800000,"20600":6237400,"20710":2038600000,"20711":2039800000,"20800":5829100000,"20900":5466100000,"21000":1102100000,"21100":9667600000,"21200":12195600000,"21300":6593200000,"21400":3374100000,"21500":114700,"21600":1013700,"21700":602700,"21800":602000,"22000":850000,"22001":480000000,"22100":3388,"22200":2380900000,"22300":6649800000,"22301":6666500000,"22400":710600,"22500":1699200000,"22600":247700,"22700":162,"23001":1839800000,"23002":1311700000,"23003":1238700000,"23100":3478700,"23200":1707100,"99999":78386100000}, - g3: {"0":11819200000,"10":12022100000,"11":11801100000,"12":11821100000,"20":6426000000,"21":6491600000,"22":6276200000,"23":6412200000,"30":11974100000,"40":6353100000,"50":1902900000,"60":3869700000,"100":4142300000,"101":4154500000,"110":4205100000.0000005,"111":4140399999.9999995,"112":4190800000,"120":3331300000,"121":3331700000,"122":3324900000,"124":3324700000,"125":3324500000,"130":4196000000,"131":4194300000,"132":4193800000,"133":4138000000,"140":3324100000,"141":3324500000,"150":881200000,"160":1746400000,"200":23231700000,"300":1848100000,"400":3383400,"500":5014500,"501":5018300,"600":1088900000,"900":19737600000,"1000":20393800000,"1100":5958600000,"1300":1444900000,"1400":1480200000,"1410":1496300000,"1411":1479800000,"1420":1288800000,"1421":1287900000,"1430":1495300000,"1440":1288300000,"1441":1287700000,"1450":264000000,"1460":621200000,"1500":442300000,"1600":5012800,"1700":509700000,"1710":498900000,"1711":502600000,"1720":475600000,"1722":480700000,"1730":499900000,"1731":500500000,"1740":479400000,"1750":97421400,"1760":217000000,"1800":79807,"2000":4741100000000,"2100":170100,"2400":8697600000,"2410":8925000000,"2500":227100,"2501":92702700,"2600":3405100000,"2611":3405500000,"2612":3404900000,"2711":2373800000,"2811":2507700000,"3000":10838900000,"3100":224900000,"3200":11136,"3710":3189900000,"3711":3199800000,"3800":6597900000,"3910":2382100000,"4010":2902700000,"4110":3108800000,"4300":3404700000,"4400":2205800000,"4500":1636000000,"4520":1046700000,"4521":1047099999.9999999,"4522":1564800000,"4700":2265800000,"4710":2162600000,"4711":2163100000,"4800":8382900000,"4900":3295400000,"5100":7155900000,"5200":584400,"5300":409600000,"5400":161600000,"5500":11559600000,"5600":866000000,"5700":1479700000,"5800":3031900,"6000":2421700000,"6100":157200000,"6211":137000,"6212":81678,"6213":56472,"6221":206700,"6222":108700,"6223":72468,"6231":19861,"6232":9942,"6233":6680,"6241":260399.99999999997,"6242":164000,"6243":112900,"6300":5024200,"6400":6187000,"6500":2963700,"6600":1709200,"6700":20708800,"6800":1150300,"6900":121800000,"7000":3744200000,"7100":215200,"7200":215200,"7300":548500000,"7400":132700,"7401":125500,"7500":147700000,"7700":1043700000,"7701":1081300000,"7800":433900000,"7801":433700000,"7900":26073,"8000":194000000,"8100":3669400000,"8200":5548,"8300":1601000000,"8400":675600000,"8500":1239400000,"8600":106500000,"8700":35247200,"8800":462300,"8900":150000,"9000":237900,"9100":343100,"9200":27741,"9300":10763,"9400":69152,"9500":34572,"9600":4504,"9700":129400000,"9710":164900000,"9720":1027900000.0000001,"9800":138100000,"9810":176200000,"9820":1744100000,"9900":4180000000,"10000":55436,"10100":13517400000,"10200":1901700000,"10300":2784900,"10400":179400000,"10410":194300000,"10420":3680600000,"10500":8163000,"10600":1481000000,"10700":27171,"10800":498600000,"10900":550000,"10901":67678,"11000":4204399999.9999995,"11100":3357500000,"11200":1147800000,"11300":2296,"11400":1569900000,"11500":2407800000,"11600":183600,"11700":24764800,"11750":8600000,"11760":11610000,"11800":24816000,"11850":7573700,"11860":9880900,"11900":3660500,"12000":1680800,"12001":174400,"12100":220600,"12200":7034,"12300":54610,"12400":1012800,"12500":18323,"12600":901800000,"12700":34043300,"12800":4798300,"12900":146600,"13000":18361,"13100":147900000,"13200":55223,"13300":3891700000,"13400":16834,"13500":3098500000,"13600":1761700,"13711":446,"13712":253,"13713":177,"13721":427,"13722":215,"13723":144,"13731":40,"13732":20,"13733":13,"13741":892,"13742":505,"13743":349,"13751":583,"13752":289,"13753":194,"13761":1458,"13762":731,"13763":484,"13771":15,"13772":7,"13773":5,"13800":345300000,"13900":1052200000,"14000":10879700000,"14100":1316300000,"14400":179800000,"14600":5045,"14700":93133,"14800":55,"14900":3042000000,"15000":431500000,"15100":86641,"15200":173000,"15300":38555,"15400":2284600000,"15500":3893700000,"15600":576400,"15700":0,"15900":17296,"16000":87982300,"16100":6635800000,"16200":30143,"16300":294600,"16400":12244000000,"16500":270000000,"16600":175100000,"16700":30133,"16800":227700,"16801":92044100,"16900":60249,"17200":557100000,"17210":490500000,"17220":1767500000,"17225":2118100000,"17230":3355300000,"17300":417900000,"17400":421400000,"17500":410500000,"17600":427000000,"17700":417700000,"17800":421100000,"17900":410200000,"18000":426900000,"18100":740300000,"18200":146300000,"18300":30120,"18400":9309,"18500":1507900000,"18600":288400,"18700":72291200000,"18800":120600,"18900":93118,"19000":12998900,"19100":5969200,"19200":3654600,"19300":324200000,"19500":21011900,"19600":424000,"19700":227600,"19800":424600,"19900":226700,"20011":206800,"20012":98050,"20013":64586,"20200":8932,"20300":19134,"20400":13302,"20500":30327000000,"20510":6523800000,"20600":1194200,"20710":145100000,"20711":145100000,"20800":1139700000,"20900":1271800000,"21000":229300000,"21100":2266600000,"21200":2534300000,"21300":1172200000,"21400":662900000,"21500":31437,"21600":219900,"21700":215600,"21800":215800,"22000":227800,"22001":91917800,"22100":663,"22200":439500000,"22300":1293700000,"22301":1292400000,"22400":130400,"22500":241500000,"22600":65880,"22700":34,"23001":292100000,"23002":174400000,"23003":126700000,"23100":854900,"23200":424400,"99999":18595900000}, - - gpus: { - // "g3s.xlarge": 1, - "g3.4xlarge": 1, - "g3.8xlarge": 2, - "g3.16xlarge": 4, - "p2.xlarge": 1, - "p2.8xlarge": 8, - "p2.16xlarge": 16, - "p3.2xlarge": 1, - "p3.8xlarge": 4, - "p3.16xlarge": 8 - }, - - vcpus: { - "g3.4xlarge": 16, - "g3.8xlarge": 32, - "g3.16xlarge": 64, - "p2.xlarge": 4, - "p2.8xlarge": 32, - "p2.16xlarge": 64, - "p3.2xlarge": 8, - "p3.8xlarge": 32, - "p3.16xlarge": 64 - }, + + gpuMaskSpeeds: { + "NVIDIA K80": {"0":4539500000,"10":4518500000,"11":4253000000,"12":4247399999.9999995,"20":2942400000,"21":2930200000,"22":2918700000,"23":2938100000,"30":4405300000,"40":2900800000,"50":776300000,"60":1589600000,"100":1933100000,"101":1930100000,"110":1722600000,"111":1930700000,"112":1721200000,"120":1398200000,"121":1401000000,"122":1399400000,"124":1398800000,"125":1399400000,"130":1722100000,"131":1723200000,"132":1721200000,"133":1936100000,"140":1400500000,"141":1401500000,"150":361400000,"160":736300000,"200":15125100000,"300":788800000,"400":1477800,"500":2627800,"501":2582600,"600":620400000,"900":7241800000,"1000":7246200000,"1100":2223600000,"1300":777100000,"1400":789800000,"1410":784000000,"1411":788300000,"1420":724600000,"1421":723400000,"1430":783800000,"1440":724400000,"1441":724300000,"1450":136500000,"1460":317900000,"1500":155000000,"1600":2608700,"1700":249700000,"1710":250800000,"1711":250200000,"1720":239700000,"1722":239800000,"1730":250100000,"1731":250400000,"1740":239500000,"1750":49501300,"1760":105800000,"1800":34410,"2000":3491100000000,"2100":70474,"2400":3499800000,"2410":3239300000,"2500":86422,"2501":95703100,"2600":1318100000,"2611":1315200000,"2612":1315100000,"2711":920100000,"2811":972700000,"3000":3793800000,"3100":129199999.99999999,"3200":2569,"3710":1336600000,"3711":1300800000,"3800":2945500000,"3910":962800000,"4010":1263500000,"4110":1312800000,"4300":1426000000,"4400":941400000,"4500":697800000,"4520":418600000,"4521":418100000,"4522":631300000,"4700":974800000,"4710":888400000,"4711":888600000,"4800":3176600000,"4900":1400800000,"5100":3221800000,"5200":315100,"5300":178600000,"5400":80414700,"5500":4653300000,"5600":318900000,"5700":791100000,"5800":1256200,"6000":1169600000,"6100":119300000,"6211":69324,"6212":36546,"6213":25422,"6221":100600,"6222":45571,"6223":32476,"6231":13733,"6232":6734,"6233":4489,"6241":132900,"6242":68831,"6243":47367,"6300":2599600,"6400":4253700,"6500":1495900,"6600":725200,"6700":10739300,"6800":632500,"6900":72992000,"7000":1620500000,"7100":102600,"7200":102800,"7300":215100000,"7400":66154,"7401":62652,"7500":48393200,"7700":546600000,"7701":564200000,"7800":216700000,"7801":215400000,"7900":12598,"8000":86947200,"8100":1541100000,"8200":2609,"8300":658000000,"8400":272000000,"8500":668500000,"8600":64945700,"8700":12682900,"8800":177400,"8900":168400,"9000":54726,"9100":145700,"9200":14456,"9300":6303,"9400":29800,"9500":14892,"9600":2335,"9700":43137800,"9710":57677900,"9720":422200000,"9800":56979600,"9810":61798700,"9820":717900000,"9900":1702400000,"10000":28756,"10100":8564799999.999999,"10200":775500000,"10300":1165000,"10400":61378700,"10410":68319900,"10420":1540600000,"10500":2948900,"10600":789100000,"10700":14560,"10800":246400000,"10900":287300,"10901":35180,"11000":1821400000,"11100":1417400000,"11200":492300000,"11300":1188,"11400":610900000,"11500":2020500000,"11600":91675,"11700":19896700,"11750":5779400,"11760":7296400,"11800":19880400,"11850":4723700,"11860":6277000,"11900":1512300,"12000":719300,"12001":72544,"12100":103800,"12200":3629,"12300":25504,"12400":831500,"12500":10961,"12600":440400000,"12700":15318800,"12800":2881800,"12900":78068,"13000":9763,"13100":48421700,"13200":35780,"13300":1653200000,"13400":10896,"13500":1293800000,"13600":701900,"13711":216,"13712":122,"13713":83,"13721":205,"13722":97,"13723":64,"13731":29,"13732":12,"13733":8,"13741":432,"13742":244,"13743":163,"13751":298,"13752":150,"13753":98,"13761":744,"13762":376,"13763":245,"13771":10,"13772":5,"13773":3,"13800":183600000,"13900":425000000,"14000":3761100000,"14100":679900000,"14400":68880300,"14600":2089,"14700":35428,"14800":29,"14900":2332500000,"15000":222000000,"15100":36590,"15200":70033,"15300":14678,"15400":1100400000,"15500":1675500000,"15600":310500,"15700":0,"15900":8110,"16000":67804600,"16100":2962300000,"16200":15934,"16300":157600,"16400":4449100000,"16500":132400000,"16600":119700000,"16700":15915,"16800":86574,"16801":97018500,"16900":31919,"17200":637100000,"17210":341500000,"17220":1654200000,"17225":1881100000,"17230":2071300000.0000002,"17300":212100000,"17400":201600000,"17500":193600000,"17600":206800000,"17700":215100000,"17800":213700000,"17900":204900000,"18000":195100000,"18100":332000000,"18200":47935300,"18300":15923,"18400":3563,"18500":603400000,"18600":87814,"18700":46086300000,"18800":64508,"18900":35431,"19000":8762500,"19100":3534400,"19200":2102500,"19300":199100000,"19500":13820900,"19600":177500,"19700":85904,"19800":176200,"19900":86546,"20011":98787,"20012":45529,"20013":32512,"20200":4163,"20300":10007,"20400":5527,"20500":24583700000,"20510":4723300000,"20600":646900,"20710":141000000,"20711":141000000,"20800":587400000,"20900":533700000.00000006,"21000":102000000,"21100":973900000,"21200":1039099999.9999999,"21300":611500000,"21400":350500000,"21500":12360,"21600":103600,"21700":70285,"21800":71107,"22000":86123,"22001":84163200,"22100":330,"22200":240900000,"22300":706500000,"22301":706500000,"22400":66799,"22500":162500000,"22600":24887,"22700":22,"23001":186100000,"23002":118800000,"23003":103400000,"23100":346000,"23200":174300,"99999":7558600000}, + "NVIDIA V100": {"0":55719700000,"10":55734900000,"11":54032400000,"12":54005000000,"20":29004200000,"21":28881200000,"22":28376600000,"23":28802100000,"30":55249300000,"40":28682100000,"50":8873800000,"60":19239200000,"100":17128800000,"101":17144800000,"110":17417500000,"111":17146900000.000002,"112":17415400000,"120":13227800000,"121":13228500000,"122":13223700000,"124":13223700000,"125":13225400000,"130":17415300000,"131":17415600000,"132":17416600000,"133":17144800000,"140":13221400000,"141":13216700000,"150":3423800000,"160":7240200000,"200":159500000000,"300":7384100000,"400":15173300,"500":25314400,"501":25307300,"600":4467400000,"900":82420300000,"1000":82509300000,"1100":23261900000,"1300":7424800000,"1400":7638500000,"1410":7653900000,"1411":7639200000,"1420":6761100000,"1421":6764300000,"1430":7656600000,"1440":6766000000,"1441":6765200000,"1450":1317200000,"1460":3125100000,"1500":1657900000,"1600":25296300,"1700":2391000000,"1710":2414000000,"1711":2393500000,"1720":2282100000,"1722":2283900000,"1730":2392900000,"1731":2393200000,"1740":2282700000,"1750":484600000,"1760":1023400000,"1800":386500,"2000":14528400000000,"2100":693200,"2400":40039800000,"2410":40782700000,"2500":850300,"2501":245900000,"2600":16062500000,"2611":16069000000,"2612":16070700000,"2711":11386200000,"2811":12348700000,"3000":39925100000,"3100":1189200000,"3200":80265,"3710":14891200000,"3711":14924100000,"3800":29926300000,"3910":11404100000,"4010":13236800000,"4110":14108300000,"4300":16071000000,"4400":9442700000,"4500":6668000000,"4520":4004700000,"4521":3997100000,"4522":6070500000,"4700":9673200000,"4710":9109700000,"4711":9110000000,"4800":37461900000,"4900":13030700000,"5100":35054400000,"5200":3055700,"5300":1950500000,"5400":790300000,"5500":45133800000,"5600":3722800000,"5700":7640700000,"5800":12102500,"6000":10268300000,"6100":1058400000.0000001,"6211":581900,"6212":354000,"6213":245200,"6221":908200,"6222":497500,"6223":329200,"6231":125400,"6232":63626,"6233":41194,"6241":1080600,"6242":566100,"6243":491200,"6300":25281000,"6400":40481300,"6500":14699100,"6600":6930300,"6700":89751600,"6800":6051100,"6900":779000000,"7000":15121500000,"7100":992500,"7200":992200,"7300":2136800000.0000002,"7400":654500,"7401":621800,"7500":999200000,"7700":3835700000,"7701":4006000000,"7800":2334400000,"7801":2338800000,"7900":130600,"8000":925500000,"8100":14727300000,"8200":25564,"8300":6334500000,"8400":2676900000,"8500":6026100000,"8600":721100000,"8700":237100000,"8800":1731700,"8900":1045000,"9000":1670700,"9100":1397000,"9200":145500,"9300":54371,"9400":285200,"9500":142600,"9600":22684,"9700":856100000,"9710":1223000000,"9720":4556700000,"9800":989800000,"9810":1295500000,"9820":7037600000,"9900":19774200000,"10000":291000,"10100":60967900000,"10200":8871200000,"10300":11619300,"10400":1293300000,"10410":1431200000,"10420":17111200000,"10500":61898000,"10600":7637800000,"10700":109000,"10800":2348000000,"10900":2846800,"10901":355200,"11000":21229200000,"11100":15740700000,"11200":4442400000,"11300":11158,"11400":7433500000,"11500":13800000000,"11600":746000,"11700":162500000,"11750":54100900,"11760":67235900,"11800":162400000,"11850":45288800,"11860":61035700,"11900":17388300,"12000":6872000,"12001":701900,"12100":1014100,"12200":34128,"12300":249000,"12400":6783700,"12500":102200,"12600":4209700000,"12700":103800000,"12800":27217200,"12900":752100,"13000":94055,"13100":977100000,"13200":367000,"13300":15954600000,"13400":111700,"13500":12321100000,"13600":6773100,"13711":1888,"13712":1073,"13713":741,"13721":2028,"13722":987,"13723":647,"13731":261,"13732":127,"13733":84,"13741":3769,"13742":2145,"13743":1484,"13751":2984,"13752":1461,"13753":961,"13761":7452,"13762":3652,"13763":2406,"13771":98,"13772":48,"13773":33,"13800":1726000000,"13900":4199600000.0000005,"14000":39894700000,"14100":6064500000,"14400":759100000,"14600":21460,"14700":348000,"14800":291,"14900":15557600000,"15000":2181900000,"15100":352300,"15200":702500,"15300":146900,"15400":7999700000,"15500":16452099999.999998,"15600":2949300,"15700":1,"15900":78965,"16000":555400000,"16100":30170700000,"16200":154700,"16300":1522000,"16400":55606900000,"16500":1350100000,"16600":1237800000,"16700":154700,"16800":850000,"16801":480900000,"16900":308500,"17200":5646300000,"17210":3514800000,"17220":13545200000,"17225":17398700000,"17230":21514700000,"17300":1715000000,"17400":1714700000,"17500":1714400000,"17600":1706600000,"17700":1715100000,"17800":1714600000,"17900":1714400000,"18000":1706600000,"18100":3285600000,"18200":979100000,"18300":154700,"18400":34828,"18500":6646400000,"18600":1954200,"18700":491700000000,"18800":629300,"18900":348300,"19000":65332800,"19100":29613400,"19200":15741200,"19300":2090400000,"19500":221100000,"19600":1708600,"19700":846100,"19800":1709900,"19900":848800,"20011":910300,"20012":495900,"20013":327600,"20200":40896,"20300":100400,"20400":53598,"20500":177600000000,"20510":43169800000,"20600":6237400,"20710":2038600000,"20711":2039800000,"20800":5829100000,"20900":5466100000,"21000":1102100000,"21100":9667600000,"21200":12195600000,"21300":6593200000,"21400":3374100000,"21500":114700,"21600":1013700,"21700":602700,"21800":602000,"22000":850000,"22001":480000000,"22100":3388,"22200":2380900000,"22300":6649800000,"22301":6666500000,"22400":710600,"22500":1699200000,"22600":247700,"22700":162,"23001":1839800000,"23002":1311700000,"23003":1238700000,"23100":3478700,"23200":1707100,"99999":78386100000}, + "NVIDIA M60": {"0":11819200000,"10":12022100000,"11":11801100000,"12":11821100000,"20":6426000000,"21":6491600000,"22":6276200000,"23":6412200000,"30":11974100000,"40":6353100000,"50":1902900000,"60":3869700000,"100":4142300000,"101":4154500000,"110":4205100000.0000005,"111":4140399999.9999995,"112":4190800000,"120":3331300000,"121":3331700000,"122":3324900000,"124":3324700000,"125":3324500000,"130":4196000000,"131":4194300000,"132":4193800000,"133":4138000000,"140":3324100000,"141":3324500000,"150":881200000,"160":1746400000,"200":23231700000,"300":1848100000,"400":3383400,"500":5014500,"501":5018300,"600":1088900000,"900":19737600000,"1000":20393800000,"1100":5958600000,"1300":1444900000,"1400":1480200000,"1410":1496300000,"1411":1479800000,"1420":1288800000,"1421":1287900000,"1430":1495300000,"1440":1288300000,"1441":1287700000,"1450":264000000,"1460":621200000,"1500":442300000,"1600":5012800,"1700":509700000,"1710":498900000,"1711":502600000,"1720":475600000,"1722":480700000,"1730":499900000,"1731":500500000,"1740":479400000,"1750":97421400,"1760":217000000,"1800":79807,"2000":4741100000000,"2100":170100,"2400":8697600000,"2410":8925000000,"2500":227100,"2501":92702700,"2600":3405100000,"2611":3405500000,"2612":3404900000,"2711":2373800000,"2811":2507700000,"3000":10838900000,"3100":224900000,"3200":11136,"3710":3189900000,"3711":3199800000,"3800":6597900000,"3910":2382100000,"4010":2902700000,"4110":3108800000,"4300":3404700000,"4400":2205800000,"4500":1636000000,"4520":1046700000,"4521":1047099999.9999999,"4522":1564800000,"4700":2265800000,"4710":2162600000,"4711":2163100000,"4800":8382900000,"4900":3295400000,"5100":7155900000,"5200":584400,"5300":409600000,"5400":161600000,"5500":11559600000,"5600":866000000,"5700":1479700000,"5800":3031900,"6000":2421700000,"6100":157200000,"6211":137000,"6212":81678,"6213":56472,"6221":206700,"6222":108700,"6223":72468,"6231":19861,"6232":9942,"6233":6680,"6241":260399.99999999997,"6242":164000,"6243":112900,"6300":5024200,"6400":6187000,"6500":2963700,"6600":1709200,"6700":20708800,"6800":1150300,"6900":121800000,"7000":3744200000,"7100":215200,"7200":215200,"7300":548500000,"7400":132700,"7401":125500,"7500":147700000,"7700":1043700000,"7701":1081300000,"7800":433900000,"7801":433700000,"7900":26073,"8000":194000000,"8100":3669400000,"8200":5548,"8300":1601000000,"8400":675600000,"8500":1239400000,"8600":106500000,"8700":35247200,"8800":462300,"8900":150000,"9000":237900,"9100":343100,"9200":27741,"9300":10763,"9400":69152,"9500":34572,"9600":4504,"9700":129400000,"9710":164900000,"9720":1027900000.0000001,"9800":138100000,"9810":176200000,"9820":1744100000,"9900":4180000000,"10000":55436,"10100":13517400000,"10200":1901700000,"10300":2784900,"10400":179400000,"10410":194300000,"10420":3680600000,"10500":8163000,"10600":1481000000,"10700":27171,"10800":498600000,"10900":550000,"10901":67678,"11000":4204399999.9999995,"11100":3357500000,"11200":1147800000,"11300":2296,"11400":1569900000,"11500":2407800000,"11600":183600,"11700":24764800,"11750":8600000,"11760":11610000,"11800":24816000,"11850":7573700,"11860":9880900,"11900":3660500,"12000":1680800,"12001":174400,"12100":220600,"12200":7034,"12300":54610,"12400":1012800,"12500":18323,"12600":901800000,"12700":34043300,"12800":4798300,"12900":146600,"13000":18361,"13100":147900000,"13200":55223,"13300":3891700000,"13400":16834,"13500":3098500000,"13600":1761700,"13711":446,"13712":253,"13713":177,"13721":427,"13722":215,"13723":144,"13731":40,"13732":20,"13733":13,"13741":892,"13742":505,"13743":349,"13751":583,"13752":289,"13753":194,"13761":1458,"13762":731,"13763":484,"13771":15,"13772":7,"13773":5,"13800":345300000,"13900":1052200000,"14000":10879700000,"14100":1316300000,"14400":179800000,"14600":5045,"14700":93133,"14800":55,"14900":3042000000,"15000":431500000,"15100":86641,"15200":173000,"15300":38555,"15400":2284600000,"15500":3893700000,"15600":576400,"15700":0,"15900":17296,"16000":87982300,"16100":6635800000,"16200":30143,"16300":294600,"16400":12244000000,"16500":270000000,"16600":175100000,"16700":30133,"16800":227700,"16801":92044100,"16900":60249,"17200":557100000,"17210":490500000,"17220":1767500000,"17225":2118100000,"17230":3355300000,"17300":417900000,"17400":421400000,"17500":410500000,"17600":427000000,"17700":417700000,"17800":421100000,"17900":410200000,"18000":426900000,"18100":740300000,"18200":146300000,"18300":30120,"18400":9309,"18500":1507900000,"18600":288400,"18700":72291200000,"18800":120600,"18900":93118,"19000":12998900,"19100":5969200,"19200":3654600,"19300":324200000,"19500":21011900,"19600":424000,"19700":227600,"19800":424600,"19900":226700,"20011":206800,"20012":98050,"20013":64586,"20200":8932,"20300":19134,"20400":13302,"20500":30327000000,"20510":6523800000,"20600":1194200,"20710":145100000,"20711":145100000,"20800":1139700000,"20900":1271800000,"21000":229300000,"21100":2266600000,"21200":2534300000,"21300":1172200000,"21400":662900000,"21500":31437,"21600":219900,"21700":215600,"21800":215800,"22000":227800,"22001":91917800,"22100":663,"22200":439500000,"22300":1293700000,"22301":1292400000,"22400":130400,"22500":241500000,"22600":65880,"22700":34,"23001":292100000,"23002":174400000,"23003":126700000,"23100":854900,"23200":424400,"99999":18595900000}, + "NVIDIA T4": {"0":21734700000,"10":21709200000,"11":20765000000,"12":20711300000,"20":12422800000,"21":12462300000,"22":12444700000,"23":12397500000,"30":20516600000,"40":12382100000,"50":3621400000,"60":7738800000,"100":7506400000,"101":7475300000,"110":7531000000,"111":7433100000,"112":7489200000,"120":5678300000,"121":5658800000,"122":5630300000,"124":5605000000,"125":5598800000,"130":7517300000,"131":7551000000,"132":7582500000,"133":7524800000,"140":5801700000,"141":5810000000,"150":1676400000,"160":3151000000,"200":56287800000,"300":3259800000,"400":6316500,"500":10537800,"501":10510000,"600":1725800000,"900":39075800000,"1000":39236100000,"1100":10325200000,"1300":3137500000,"1400":3211800000,"1410":3205900000,"1411":3205100000,"1420":2865300000,"1421":2867200000,"1430":3187700000,"1440":2856700000,"1441":2853300000,"1450":577300000,"1460":1286800000,"1500":884700000,"1600":10190500,"1700":1002900000,"1710":1012700000,"1711":1015700000,"1720":975100000,"1722":976500000,"1730":1030400000.0000001,"1731":1030400000.0000001,"1740":982300000,"1750":221700000,"1760":463100000,"1800":125800,"2000":27883500000000,"2100":299800,"2400":15334500000,"2410":13909500000,"2500":369600,"2501":162700000,"2600":6529300000,"2611":6511900000,"2612":6500600000,"2711":4557800000,"2811":4921400000,"3000":21921000000,"3100":354800000,"3200":26886,"3710":6016900000,"3711":6003300000,"3800":12126400000,"3910":4507300000,"4010":5308200000,"4110":5642800000,"4300":6294600000,"4400":3834200000,"4500":2715600000,"4520":1624600000,"4521":1616200000,"4522":2476100000,"4700":3873500000,"4710":3638600000,"4711":3639300000,"4800":12855300000,"4900":5302900000,"5100":13318100000,"5200":1191900,"5300":785900000,"5400":330000000,"5500":20893200000,"5600":1491500000,"5700":2980600000,"5800":4786100,"6000":4553700000,"6100":272700000,"6211":253900,"6212":145800,"6213":106200,"6221":387400,"6222":191700,"6223":128300.00000000001,"6231":35068,"6232":17539,"6233":11687,"6241":500300,"6242":320900,"6243":178900,"6300":10384900,"6400":16968000,"6500":6315000,"6600":3009300,"6700":41450800,"6800":2200900,"6900":214700000,"7000":6685700000,"7100":452900,"7200":449100,"7300":964100000,"7400":277100,"7401":259899.99999999997,"7500":319400000,"7700":1546200000,"7701":1565600000,"7800":1038800000,"7801":977000000,"7900":55069,"8000":396700000,"8100":6436200000,"8200":11407,"8300":2716600000,"8400":1138200000,"8500":2134400000,"8600":184000000,"8700":60045000,"8800":732000,"8900":319000,"9000":436400,"9100":578000,"9200":59050,"9300":24054,"9400":119100,"9500":59214,"9600":8952,"9700":267899999.99999997,"9710":309700000,"9720":1727800000,"9800":309900000,"9810":337500000,"9820":2865000000,"9900":7499200000,"10000":114000,"10100":23461500000,"10200":3354300000,"10300":4690900,"10400":351200000,"10410":372500000,"10420":6454800000,"10500":16650800,"10600":2987400000,"10700":37644,"10800":937300000,"10900":1116100,"10901":137500,"11000":7792200000,"11100":5848300000,"11200":1779000000,"11300":4576,"11400":2840500000,"11500":6750900000,"11600":312700,"11700":43457000,"11750":15520500,"11760":21447000,"11800":43430600,"11850":13580100,"11860":17859700,"11900":7318300,"12000":2911400,"12001":298800,"12100":456400,"12200":14068,"12300":111100,"12400":1702800,"12500":32898,"12600":1752100000,"12700":67654200,"12800":8748500,"12900":276400,"13000":34723,"13100":319000000,"13200":95778,"13300":7025900000,"13400":29268,"13500":5451300000,"13600":2871700,"13711":879,"13712":478,"13713":314,"13721":914,"13722":439,"13723":291,"13731":70,"13732":35,"13733":23,"13741":1769,"13742":969,"13743":638,"13751":1163,"13752":634,"13753":412,"13761":2890,"13762":1576,"13763":1015,"13771":27,"13772":13,"13773":9,"13800":782400000,"13900":1766300000,"14000":21208700000,"14100":2209800000,"14400":347700000,"14600":9401,"14700":151200,"14800":122,"14900":4262300000,"15000":954300000,"15100":153000,"15200":298600,"15300":63270,"15400":3258000000,"15500":7200000000,"15600":1079400,"15700":1,"15900":34476,"16000":139800000,"16100":12431300000,"16200":56581,"16300":555100,"16400":21489600000,"16500":549500000,"16600":429600000,"16700":56852,"16800":372300,"16801":164500000,"16900":113400,"17200":3206500000,"17210":1290600000,"17220":5036700000,"17225":6502100000,"17230":6594200000,"17300":749100000,"17400":741000000,"17500":744800000,"17600":736000000,"17700":737700000,"17800":738100000,"17900":727100000,"18000":726200000,"18100":1387600000,"18200":306500000,"18300":54697,"18400":14492,"18500":2543000000,"18600":548100,"18700":80488400000,"18800":250100,"18900":143400,"19000":29510800,"19100":13245900,"19200":7622400,"19300":652600000,"19500":89645900,"19600":693400,"19700":345300,"19800":692000,"19900":344200,"20011":389200,"20012":183300,"20013":121800,"20200":17143,"20300":39566,"20400":21328,"20500":74432800000,"20510":14504900000,"20600":2536600,"20710":766200000,"20711":764300000,"20800":2383900000,"20900":2232400000,"21000":470500000,"21100":4113200000,"21200":4992100000,"21300":2992700000,"21400":1281200000,"21500":46531,"21600":459600,"21700":321200,"21800":321900,"22000":369000,"22001":164600000,"22100":1284,"22200":1017200000,"22300":2791800000,"22301":2790700000,"22400":274100,"22500":471100000,"22600":106000,"22700":186,"23001":625600000,"23002":485300000,"23003":408000000,"23100":1491500,"23200":735800,"99999":39150400000}, + "NVIDIA T4G": {"0":20804100000,"10":20527000000,"11":18987400000,"12":18703400000,"20":10949600000,"21":10895300000,"22":10623700000,"23":10484400000,"24":10463500000,"30":18035300000,"40":10673400000,"50":3259100000,"60":6552200000,"70":18514600000,"100":6541100000,"101":6530700000,"110":6565600000,"111":6491500000,"112":6567100000,"120":5087700000,"121":5075100000,"122":5065100000,"124":5057400000,"125":5065700000,"130":6602400000,"131":6572400000,"132":6577900000,"133":6528100000,"140":5079500000,"141":5072100000,"150":1488200000,"160":2758800000,"170":6509300000,"200":47164700000,"300":2837800000,"400":5144100,"500":6758000,"501":6714000,"600":1581500000,"900":31318500000,"1000":31034400000,"1100":9823800000,"1300":2785400000,"1400":2838100000,"1410":2835000000,"1411":2841300000,"1420":2561100000,"1421":2545800000,"1430":2844600000,"1440":2553600000,"1441":2547400000,"1450":553200000,"1460":1206600000,"1470":2832700000,"1500":796100000,"1600":6756400,"1700":935100000,"1710":935400000,"1711":934800000,"1720":900600000,"1722":898100000,"1730":937400000,"1731":934400000,"1740":899800000,"1750":199600000,"1760":398100000,"1770":934900000,"1800":108900,"2000":36651900000000,"2100":269200,"2400":13787200000,"2410":14228500000,"2600":5766800000,"2611":5780100000,"2612":5995000000,"2711":4341300000,"2811":4509400000,"3000":19727500000,"3100":343800000,"3200":27757,"3500":3823000000,"3710":5348400000,"3711":5346900000,"3800":10547400000,"3910":4264800000,"4010":4821400000,"4110":5434000000,"4300":5790700000,"4400":3466200000,"4500":2557100000,"4510":2429400000,"4520":1556800000,"4521":1559200000,"4522":2369200000,"4700":3487800000,"4710":3327200000,"4711":3322500000,"4800":13966100000,"4900":4917300000,"5000":2371300000,"5100":12423500000,"5200":1106500,"5300":754000000,"5400":339000000,"5500":19933000000,"5600":1463100000,"5700":2874100000,"5800":3955800,"6000":4485300000,"6100":267399999.99999997,"6211":252800,"6212":150600,"6213":105500,"6221":360200,"6222":175500,"6223":108900,"6231":31607,"6232":15621,"6233":10632,"6241":458200,"6242":248200,"6243":170400,"6300":6761300,"6400":9846500,"6500":4767000,"6600":2457000,"6700":15408900,"6800":2045500,"6900":188700000,"7000":5731800000,"7100":379700,"7200":382700,"7300":863500000,"7400":250500,"7401":238100,"7500":398500000,"7700":1717800000,"7701":1722500000,"7800":930900000,"7801":930600000,"7900":50224,"8000":317000000,"8100":5553000000,"8200":10161,"8300":2442700000,"8400":1040500000,"8500":1936800000,"8600":169700000,"8700":55122700,"8800":635400,"8900":1234,"9000":576500,"9100":523299.99999999994,"9200":55805,"9300":18647,"9400":110400,"9500":54354,"9600":8677,"9700":373100000,"9710":438800000,"9720":1668700000,"9800":393500000,"9810":433000000,"9820":2689600000,"9900":6779900000,"10000":111500,"10100":21701300000,"10200":3252800000,"10300":3828700,"10400":510300000,"10410":504700000,"10420":7021900000,"10500":12324100,"10600":2834300000,"10700":44787,"10800":923100000,"10810":919000000,"10820":885400000,"10830":925200000,"10840":886400000,"10870":920600000,"10900":1053300,"10901":135500,"11000":7194600000,"11100":6097500000,"11200":1753100000,"11300":4281,"11400":2744400000,"11500":7438500000,"11600":276800,"11700":40564600,"11750":14392100,"11760":20061200,"11800":40614200,"11850":12576500,"11860":16753200,"11900":5055700,"12000":2357500,"12001":266700,"12100":389000,"12200":12973,"12300":98703,"12400":1444900,"12500":31956,"12600":1607900000,"12700":18536500,"12800":6780200,"12900":276300,"13000":35129,"13100":391000000,"13200":87363,"13300":6079900000,"13400":26820,"13500":4844700000,"13600":2364400,"13711":771,"13712":453,"13713":315,"13721":814,"13722":398,"13723":254,"13731":60,"13732":30,"13733":20,"13741":1578,"13742":918,"13743":645,"13751":1152,"13752":566,"13753":378,"13761":2879,"13762":1435,"13763":959,"13771":24,"13772":12,"13773":8,"13781":59,"13782":30,"13783":20,"13800":727400000,"13900":1606900000,"14000":19066200000,"14100":1992300000,"14400":312100000,"14500":630700000,"14600":8107,"14700":131900,"14800":112,"14900":4038600000,"15000":831500000,"15100":135900,"15200":264700,"15300":57102,"15310":48371,"15400":3277300000,"15500":6211800000,"15600":1048900,"15700":0,"15900":32059,"15910":24533,"16000":133500000,"16100":13354300000,"16200":58573,"16300":550900,"16400":18172500000,"16500":549000000,"16600":380800000,"16700":56565,"16900":115200,"17010":2582800,"17200":2895400000,"17210":1229700000,"17220":5186400000,"17225":5837500000,"17230":5627600000,"17300":658600000,"17400":662800000,"17500":661400000,"17600":660500000,"17700":659300000,"17800":662200000,"17900":659800000,"18000":660200000,"18100":1348100000,"18200":389500000,"18300":58130,"18400":13522,"18500":2368900000,"18600":655300,"18700":101800000000,"18800":236000,"18900":135000,"19000":12974300,"19100":8310000,"19200":5746700,"19300":766600000,"19500":86195200,"19600":642700,"19700":323900,"19800":647700,"19900":326000,"20011":370300,"20012":179700,"20013":114600,"20200":16333,"20300":38768,"20400":20665,"20500":63849400000,"20510":12982200000,"20600":2183500,"20710":766500000,"20711":763300000,"20720":677800000,"20800":2175400000,"20900":2036000000,"21000":444400000,"21100":3603200000,"21200":4451500000,"21300":2562500000,"21400":1283600000,"21420":692200000,"21500":47474,"21501":47686,"21600":395500,"21700":270700,"21800":267600,"22000":322500,"22001":20279800,"22100":1315,"22200":926600000,"22300":2517300000,"22301":2512000000,"22400":263300,"22500":414800000,"22600":94924,"22700":1269,"22911":417200000,"22921":1375100000,"22931":589100000,"22941":469500000,"22951":395200000,"23001":556100000,"23002":430000000,"23003":357500000,"23100":1242000,"23200":639200,"23300":658800,"23400":11528,"23500":40332,"23600":20462,"23700":31991,"23800":31747,"23900":1414200,"24100":269400,"24200":76978,"24300":2382400000,"24410":631800,"24420":525500,"24500":1261,"24600":20799,"24700":6683000000,"24800":1369700000,"24900":10319300000,"25000":110600,"25100":234500,"25200":228200,"25300":8657,"25400":12364400,"25500":268600,"25600":27895,"25700":102400000000,"25800":27910,"25900":17243,"26000":103200000,"26100":111900,"26200":45934000,"26300":1990500000,"26401":1723700000,"26402":1492000000,"26403":1231600000,"26500":18189,"26600":111300,"26700":123000,"26800":122700,"26900":70961,"27000":23772700,"27100":23552200,"27200":5779500000,"27300":71169,"27400":133500,"27500":3969,"27600":3064,"27700":1274,"27800":61025200000,"27900":7519100000,"28000":25391900000,"28100":111600,"28200":1265,"28300":993900000,"28400":230,"28600":281200,"28700":60573100,"28800":645500,"28900":325600,"99999":31539300000}, + "NVIDIA A100": {}, + "NVIDIA A10G": {"0":59955800000,"10":59999700000,"11":59451200000,"12":59428600000,"20":31972300000,"21":32510500000,"22":31965200000,"23":31966500000,"24":32508600000,"30":59150400000,"40":32472900000,"50":10501100000,"60":20949000000,"70":59879300000,"100":19551700000,"101":19544600000,"110":19759800000,"111":19547500000,"112":19760500000,"120":15089500000,"121":15092900000,"122":14977200000,"124":14974200000,"125":14976700000,"130":19749600000,"131":19745500000,"132":19738000000,"133":19528100000,"140":14961500000,"141":14963900000,"150":4560600000,"160":8403000000,"170":19537800000,"200":165900000000,"300":8617000000,"400":16405599.999999998,"500":21999100,"501":21986400,"600":5060700000,"900":102000000000,"1000":101700000000,"1100":30228700000,"1300":8331299999.999999,"1400":8556600000,"1410":8539600000,"1411":8560000000,"1420":7672000000,"1421":7652600000,"1430":8534299999.999999,"1440":7651200000,"1441":7649400000,"1450":1680000000,"1460":3702800000,"1470":8550799999.999999,"1500":2446000000,"1600":21953900,"1700":2892100000,"1710":2878100000,"1711":2878500000,"1720":2755700000,"1722":2754100000,"1730":2878100000,"1731":2878100000,"1740":2754100000,"1750":636500000,"1760":1282600000,"1770":2891400000,"1800":343400,"2000":75821500000000,"2100":801700,"2400":45026700000,"2410":45081000000,"2600":19264000000,"2611":19263400000,"2612":19265900000,"2711":13332900000,"2811":13895000000,"3000":59128400000,"3100":1530300000,"3200":93734,"3500":12195600000,"3710":17081700000,"3711":16955099999.999998,"3800":32339800000,"3910":13327500000,"4010":14888300000,"4110":17111000000,"4300":19262800000,"4400":10781200000,"4500":7743200000,"4510":7506200000,"4520":4790200000,"4521":4789900000,"4522":7222300000,"4700":11075400000,"4710":10634900000,"4711":10565000000,"4800":44134300000,"4900":14587500000,"5000":7225800000,"5100":40075800000,"5200":3303100,"5300":2421800000,"5400":1049200000,"5500":61883300000,"5600":4529400000,"5700":8557799999.999999,"5800":12108800,"6000":13944800000,"6100":1290800000,"6211":751100,"6212":406200,"6213":279100,"6221":1097500,"6222":522600,"6223":344200,"6231":147100,"6232":75178,"6233":48771,"6241":1375100,"6242":711400,"6243":479200,"6300":21992200,"6400":31799700,"6500":15017700,"6600":7436600,"6700":48828200,"6800":6365500,"6900":917100000,"7000":17083800000,"7100":1221100,"7200":1221500,"7300":2639200000,"7400":796600,"7401":751700,"7500":1414800000,"7700":5252700000,"7701":5253700000,"7800":3408500000,"7801":3427700000,"7900":153300,"8000":1073000000,"8100":16692599999.999998,"8200":31838,"8300":7305000000,"8400":3231500000,"8500":7941300000,"8600":799300000,"8700":263800000,"8800":1975300,"8900":3112,"9000":1862000,"9100":1608500,"9200":167500,"9300":37075,"9400":327800,"9500":163900,"9600":25986,"9700":1057400000.0000001,"9710":1497500000,"9720":5295000000,"9800":1343800000,"9810":1457700000,"9820":7947900000,"9900":21911000000,"10000":334800,"10100":68152000000,"10200":10504600000,"10300":11719300,"10400":1694500000,"10410":1653500000,"10420":21773700000,"10500":41869600,"10600":8559799999.999999,"10700":157600,"10800":2840900000,"10810":2832100000,"10820":2714500000,"10830":2840600000,"10840":2718800000,"10870":2839700000,"10900":3283100,"10901":408100,"11000":23756000000,"11100":19104600000,"11200":5180700000,"11300":13061,"11400":9003800000,"11500":15358200000,"11600":880500,"11700":186200000,"11750":66500700,"11760":92015300,"11800":186300000,"11850":58219500,"11860":76614300,"11900":16301800,"12000":7243700,"12001":815900,"12100":1245700,"12200":40321,"12300":306500,"12400":7005100,"12500":20601,"12600":4915000000,"12700":60289200,"12800":23141000,"12900":849700,"13000":107500,"13100":1379200000,"13200":410500,"13300":18176700000,"13400":125400,"13500":14043300000,"13600":7106500,"13711":2489,"13712":1425,"13713":996,"13721":2498,"13722":1257,"13723":837,"13731":298,"13732":138,"13733":81,"13741":4981,"13742":2844,"13743":1991,"13751":3463,"13752":1734,"13753":1157,"13761":8659,"13762":4336,"13763":2890,"13771":106,"13772":53,"13773":36,"13781":286,"13782":132,"13783":88,"13800":2210100000,"13900":4996800000,"14000":57432000000,"14100":7959300000,"14400":961100000,"14500":3173800000,"14600":25269,"14700":406800,"14800":331,"14900":16917900000.000002,"15000":2562600000,"15100":409200,"15200":809800,"15300":170900,"15400":11816500000,"15500":18580900000,"15600":3207400,"15700":0,"15900":98723,"16000":655000000,"16100":42152200000,"16200":176600,"16300":1688400,"16400":58186200000,"16500":1630300000,"16600":1964800000,"16700":167700,"16900":352100,"17200":9848600000,"17210":3339800000,"17220":17276300000,"17225":20162700000,"17230":25650400000,"17300":1938900000,"17400":1937700000,"17500":1938200000,"17600":1937400000,"17700":1938100000,"17800":1935300000,"17900":1938600000,"18000":1937900000,"18100":4038900000,"18200":1367900000,"18300":176600,"18400":40897,"18500":7541400000,"18600":3076400,"18700":278800000000,"18800":701900,"18900":408000,"19000":42411800,"19100":26837100,"19200":19339600,"19300":2699100000,"19500":319400000,"19600":1956900,"19700":982400,"19800":1957700,"19900":983500,"20011":1134400,"20012":547300,"20013":361000,"20200":50943,"20300":115500,"20400":62485,"20500":219400000000,"20510":50571400000,"20600":6550400,"20710":2329400000,"20711":2328600000,"20720":2117400000,"20800":6586900000,"20900":6202200000,"21000":1356400000,"21100":11076400000,"21200":13961300000,"21300":8200000000,"21400":3872600000,"21500":154000,"21501":154000,"21600":1245500,"21700":1227600,"21800":846400,"22000":988500,"22001":79852000,"22100":3883,"22200":2844400000,"22300":7453400000,"22301":7475700000,"22400":800200,"22500":2034400000,"22600":288600,"22700":3118,"22911":1691300000,"22921":5637500000,"22931":2806800000,"22941":2348400000,"22951":1959100000,"23001":2789900000,"23002":2170400000,"23003":1784500000,"23100":3887600,"23200":1951900,"23300":2007600,"23400":35431,"23500":180900,"23600":93537,"23700":20568,"23800":19551,"23900":5185300,"24100":818300,"24200":235500,"24300":7261600000,"24410":1913400,"24420":1587600,"24500":4201,"24600":63851,"24700":21767100000,"24800":4135000000,"24900":33354699999.999996,"25000":305900,"25100":495900,"25200":830600,"25300":26384,"25400":41902700,"25500":808100,"25600":90217,"25700":361700000000,"25800":90259,"25900":53799,"26000":172700000,"26100":335200,"26200":98323700,"26300":6000500000,"26401":8238100000,"26402":7023300000,"26403":5825900000,"26500":86177,"26600":334500,"26700":393900,"26800":394000,"26900":282800,"27000":81158400,"27100":79863400,"27200":17756300000,"27300":282900,"27400":407300,"27500":11942,"27600":9309,"99999":102000000000}, + "Radeon Pro V520": {"0":19395200000,"10":19426500000,"11":19403400000,"12":19429800000,"20":10178700000,"21":10182600000,"22":10187500000,"23":10185100000,"24":10176000000,"30":19431900000,"40":10201200000,"50":2985300000,"60":5935100000,"70":19452100000,"100":7606800000,"101":7614400000,"110":7651800000,"111":7613600000,"112":7648700000,"120":6080400000,"121":6071300000,"122":6066200000,"124":6062100000,"125":6069800000,"130":7652300000,"131":7662900000,"132":7653500000,"133":7620500000,"140":6063100000,"141":6070100000,"150":1739100000,"160":3273100000,"170":7610000000,"200":45814500000,"300":3391000000,"400":5478700,"500":7716000,"501":7665500,"600":1728000000,"900":31318200000,"1000":31349300000,"1100":10791500000,"1300":3143200000,"1400":3206000000,"1410":3218100000,"1411":3205600000,"1420":2912700000,"1421":2907000000,"1430":3220200000,"1440":2908300000,"1441":2911100000,"1450":631700000,"1460":1383000000,"1470":3205600000,"1500":695100000,"1600":7663400,"1700":922900000,"1710":818600000,"1711":817400000,"1720":882000000,"1722":880800000,"1730":820300000,"1731":817200000,"1740":812800000,"1750":190900000,"1760":400700000,"1770":817600000,"1800":156100,"2000":11204300000000,"2100":312200,"2400":12891800000,"2410":12882900000,"2600":5802200000,"2611":5802800000,"2612":5802600000,"2711":3936900000,"2811":4074600000,"3000":18776800000,"3100":443300000,"3200":19421,"3500":3736100000,"3710":5312100000,"3711":5316600000,"3800":10190100000,"3910":3939000000,"4010":4739900000,"4110":5314200000,"4300":5803000000,"4400":3970600000,"4500":3119500000,"4510":3026400000,"4520":1922600000,"4521":1921100000,"4522":2888600000,"4700":4107899999.9999995,"4710":3943600000,"4711":3943000000,"4800":12699600000,"4900":5952900000,"5000":2934800000,"5100":11702700000,"5200":1202900,"5300":712100000,"5400":393500000,"5500":21063300000,"5600":1299800000,"5700":3210900000,"5800":4940600,"6000":4098100000.0000005,"6100":446800000,"6211":245700,"6212":140200,"6213":98245,"6221":400400,"6222":197900,"6223":134600,"6231":20979,"6232":10949,"6233":7292,"6241":485000,"6242":273800,"6243":190900,"6300":6938000,"6400":15220500,"6500":5448500,"6600":3052000,"6700":28697000,"6800":1790800,"6900":227600000,"7000":6905400000,"7100":340500,"7200":340200,"7300":994200000,"7400":269000,"7401":255800,"7500":304400000,"7700":1240900000,"7701":1246800000,"7800":1192700000,"7801":1209600000,"7900":51016,"8000":395600000,"8100":6768500000,"8200":9108,"8300":2966700000,"8400":1296200000,"8500":2661900000,"8600":198700000,"8700":65795100.00000001,"8800":705300,"8900":487,"9000":426800,"9100":630200,"9200":58099,"9300":1280,"9400":126700,"9500":63413,"9600":8402,"9700":298000000,"9710":377400000,"9720":1603200000,"9800":361500000,"9810":387300000,"9820":3180400000,"9900":6310100000,"10000":116200,"10100":25336300000,"10200":2984900000,"10300":4768600,"10400":409600000,"10410":436400000,"10420":6056700000,"10500":16388200,"10600":3210800000,"10700":44943,"10800":911400000,"10810":910700000,"10820":869900000,"10830":910700000,"10840":870100000,"10870":911100000,"10900":1295100,"10901":154900,"11000":6649900000,"11100":5795100000,"11200":2115199999.9999998,"11300":4224,"11400":2581100000,"11500":37973300000,"11600":409800,"11700":45365100,"11750":15309800,"11760":20586000,"11800":46386700,"11850":13462700,"11860":17340200,"11900":5376400,"12000":3041400,"12001":319100,"12100":403100,"12200":12904,"12300":89045,"12400":1397300,"12500":47163,"12600":1901100000,"12700":5210700,"12800":10486500,"12900":322400,"13000":40281,"13100":296000000,"13200":104500,"13300":7143300000,"13400":31831,"13500":5563800000,"13600":1539000,"13711":742,"13712":425,"13713":296,"13721":804,"13722":400,"13723":267,"13731":40,"13732":19,"13733":13,"13741":1483,"13742":849,"13743":596,"13751":1255,"13752":630,"13753":419,"13761":3136,"13762":1575,"13763":1051,"13771":29,"13772":14,"13773":8,"13781":63,"13782":37,"13783":21,"13800":822100000,"13900":2030900000,"14000":16078200000,"14100":2622800000,"14400":370900000,"14500":1177800000,"14600":8500,"14700":146600,"14800":127,"14900":149100000,"15000":921600000,"15100":148100,"15200":303600,"15300":66497,"15400":3918000000,"15500":7350500000,"15600":1262400,"15700":0,"15900":28047,"16000":164500000,"16100":11629300000,"16200":63373,"16300":543100,"16400":19343300000,"16500":625000000,"16600":543100000,"16700":60993,"16900":120500,"17210":1235400000,"17230":8774300000,"17300":509800000,"17400":509600000,"17500":509700000,"17600":509700000,"17700":510300000,"17800":509700000,"17900":509800000,"18000":509700000,"18100":1616100000,"18200":328900000,"18300":63405,"18400":15358,"18500":2642500000,"18600":807600,"18700":40565400000,"18800":266100,"18900":159700,"19000":4757700,"19100":3034400,"19200":3941100,"19300":1022700000,"19500":200200000,"19600":772100,"19700":388300,"19800":772600,"19900":388500,"20011":400200,"20012":197900,"20013":134800,"20200":16179,"20300":43767,"20400":24366,"20500":75061000000,"20510":11991400000,"20600":2579800,"20710":884400000,"20711":883600000,"20720":796200000,"20800":2398800000,"20900":2173600000,"21000":345700000,"21100":4111200000,"21200":4089300000,"21300":2733200000,"21400":1455200000,"21500":41490,"21501":61243,"21600":345600,"21700":234000,"22000":389500,"22001":92849800,"22100":1464,"22200":912700000,"22300":2836200000,"22301":2839600000,"22400":250900,"22500":541900000,"22600":102800,"22700":369,"22911":445500000,"22921":1872200000,"22931":670300000,"22941":586900000,"22951":577900000,"23001":840400000,"23002":594200000,"23003":471100000,"23100":1229700,"23200":772600,"23300":791200,"23400":12674,"23500":46033,"23600":23686,"23700":47168,"23800":51137,"23900":1204200,"24100":308500,"24200":88195,"24300":2907200000,"24410":771600,"24420":615400,"24500":1342,"24600":23140,"24700":6256200000,"24800":1638100000,"24900":12288100000,"25000":155100,"25100":302700,"25200":291500,"25300":8228,"25400":16314600,"25500":294200,"25600":19183,"25700":109200000000,"25800":19176,"25900":18381,"26000":200000000,"26100":121900,"26200":507600000,"26300":2017600000,"26401":2046100000,"26402":1776000000,"26403":1434400000,"26500":19794,"26600":132200,"26700":134200,"26800":133700,"26900":87159,"27000":45941300,"27100":44244300,"27200":7270400000,"27300":86992,"27400":146600,"27500":4004,"27600":3107,"99999":31334600000} + }, + + gpuWordlistSpeeds: { + "NVIDIA K80": {"0":1502700000,"10":1449400000,"100":952900000,"1000":1789200000,"10000":13817,"10100":930100000,"10200":565900000,"10300":1081700,"10400":90845500,"10410":105900000,"10420":521299999.99999994,"10500":3891900,"10600":496900000,"10700":9388,"10800":185000000,"10810":198700000,"10820":200800000,"10830":192300000,"10840":199600000,"10870":183300000,"10900":299300,"110":923600000,"1100":1204600000,"11000":1057800000,"11100":853400000,"11200":390600000,"11300":1411,"11400":163000000,"11500":982000000,"11600":1867,"11700":18348500,"11750":3387600,"11760":4687900,"11800":16811500,"11850":3007300,"11860":3971100,"11900":1403400,"120":875400000,"12000":646800,"12100":98291,"12200":3451,"12300":24220,"12400":1363100,"12500":6285,"12600":357300000,"12700":11285100,"12800":2459000,"12900":74636,"130":815900000,"1300":543000000,"13000":9404,"13100":66688700,"13200":35343,"13300":988400000,"13400":43659,"13500":491000000,"13600":642000,"13711":188,"13712":111,"13713":78,"13721":196,"13722":86,"13723":55,"13741":375,"13742":203,"13743":155,"13751":288,"13752":142,"13753":87,"13761":719,"13762":355,"13763":233,"13800":142100000,"13900":337700000,"140":878200000,"1400":565300000,"14000":510500000,"1410":490400000,"14100":104500000,"1420":503000000,"1430":467000000,"1440":497100000,"14400":66060700,"1450":122400000,"14500":47634500,"1460":244400000,"1470":544400000,"14700":33452,"14800":27,"14900":1645700000,"150":291300000,"1500":34554300,"15000":181500000,"15100":45699,"15200":67675,"15300":14122,"15400":49424600,"15500":844100000,"15600":1171,"15700":0,"15900":12420,"160":540800000,"1600":2023200,"16000":35834100,"16100":1271300000,"16200":15449,"16300":149900,"16400":1515000000,"16500":73129300,"16600":105800000,"16700":13903,"16900":30724,"170":993500000,"1700":187300000,"1710":199500000,"1720":201700000,"17200":105800000,"17210":80535500,"17220":116600000,"17225":121400000,"17230":223400000,"1730":195800000,"17300":189600000,"1740":203300000,"17400":176900000,"1750":45016700,"17500":187500000,"1760":93138500,"17600":185300000,"1770":186100000,"17700":187200000,"17800":174900000,"17900":187600000,"1800":33589,"18000":185600000,"18100":122400000,"18200":65216800,"18300":15500,"18400":3346,"18500":174700000,"18600":115300,"18700":863700000,"18800":61210,"18900":33378,"19000":1944600,"19100":748500,"19200":264200,"19300":70459000,"19500":8808200,"19600":164100,"19700":81285,"19800":163600,"19900":81263,"20":1434900000,"200":1066000000,"2000":15818500000,"20011":94418,"20012":38709,"20013":23903,"20200":3986,"20300":9526,"20400":5147,"20500":346300000,"20510":234900000,"20600":597100,"20710":148100000,"20720":70667200,"20800":482000000,"20900":427400000,"2100":67286,"21000":87212700,"21100":625900000,"21200":691900000,"21300":205700000,"21400":287700000,"21500":12590,"21501":12326,"21600":98179,"21700":69626,"21800":53918,"22000":84483,"22001":57145,"22100":273,"22200":207500000,"22300":465300000,"22400":36466,"22500":137500000,"22600":23566,"22700":167,"22911":57081700,"22921":134100000,"22931":83573800,"22941":65025300,"22951":56369700,"23001":165600000,"23002":119300000,"23003":108700000,"23100":332600,"23200":161800,"23300":167400,"23400":3094,"23500":10865,"23600":7729,"23700":6282,"23800":6181,"23900":386000,"2400":1477100000,"2410":1272700000,"24100":65914,"24200":20550,"24300":441300000,"24410":171600,"24420":133900,"24500":275,"24600":5211,"24700":1064000000,"24800":278900000,"24900":1266800000,"25000":19235,"25100":36497,"25200":37476,"25300":2250,"25400":3904000,"25500":67094,"25600":3006,"25700":939900000,"25800":3014,"25900":4770,"2600":973800000,"26000":15280000,"26100":27885,"26200":2438200,"26300":185100000,"26401":546800000,"26402":464200000,"26403":398400000,"26500":6877,"26700":27499,"26800":27496,"26900":17621,"27000":1194000,"27100":1298700,"27200":941600000,"27300":17607,"27400":33381,"27500":989,"27600":785,"30":1334900000,"300":569000000,"3000":210000000,"3100":93270300,"3200":2501,"3500":625700000,"3710":912000000,"3800":1238900000,"3910":722700000,"40":1422000000,"400":1352400,"4010":793800000,"4110":795100000,"4300":976400000,"4400":681100000,"4500":526900000,"4510":481600000,"4520":327700000,"4700":729100000,"4710":617100000,"4800":1314600000,"4900":810300000,"50":540600000,"500":2028800,"5000":453300000,"501":2029700,"5100":1373400000,"5200":296200,"5300":166000000,"5400":78248400,"5500":1736000000,"5600":246200000,"5700":564900000,"5800":1151000,"60":1025500000,"600":433700000,"6000":802500000,"6100":100600000,"6211":66155,"6212":33534,"6213":23008,"6221":93762,"6222":38671,"6223":23938,"6241":127300,"6242":63581,"6243":42510,"6300":2023700,"6400":3490100,"6500":1381400,"6600":652700,"6700":6949100,"6800":589400,"6900":65958399.99999999,"70":1415500000,"7000":907300000,"7200":9919,"7300":236200000,"7400":52457,"7500":65584500,"7700":676100000,"7701":690800000,"7800":167200000,"7801":182800000,"7900":12476,"8000":66028899.99999999,"8100":1008100000,"8200":2493,"8300":384700000,"8400":230000000,"8500":200000000,"8600":21969900,"8700":19928800,"8800":165400,"8900":29066,"900":1852500000,"9000":55909,"9100":131000,"9200":13800,"9300":1897,"9400":28216,"9500":14023,"9600":2237,"9700":58286200,"9710":89924400,"9720":193100000,"9800":75935000,"9810":96808400,"9820":406900000,"9900":1092200000,"99999":1840100000}, + "NVIDIA V100": {"0":15415100000,"10":11178700000,"100":9174900000,"1000":16663500000,"10000":147600,"10100":13824000000,"10200":6523900000,"10300":9069600,"10400":1392500000,"10410":1657600000,"10420":8882800000,"10500":27698600,"10600":4619600000,"10700":81440,"10800":2042100000,"10810":1959600000,"10820":1990700000,"10830":1891400000,"10840":1984200000,"10870":2026000000,"10900":2856000,"110":7945900000,"1100":10849100000,"11000":10119900000,"11100":8191400000,"11200":3491100000,"11300":14134,"11400":2425100000,"11500":8225200000.000001,"11600":18700,"11700":164500000,"11750":45990000,"11760":64422700,"11800":165100000,"11850":39625300,"11860":51803900,"11900":12807700,"120":8356400000,"12000":6143400,"12100":1015000,"12200":34924,"12300":253800,"12400":9880300,"12500":74940,"12600":3380400000,"12700":35540200,"12800":16600000,"12900":739800,"130":6893600000,"1300":5503400000,"13000":94002,"13100":1001200000,"13200":384500,"13300":9236800000,"13400":463000,"13500":4481200000,"13600":5990600,"13711":2197,"13712":1254,"13713":837,"13721":2038,"13722":1033,"13723":684,"13731":248,"13732":109,"13733":72,"13741":4393,"13742":2511,"13743":1754,"13751":2909,"13752":1455,"13753":909,"13761":7272,"13762":3639,"13763":2422,"13800":1525700000,"13900":3319500000,"140":8222400000,"1400":5287600000,"14000":4865800000,"1410":4620900000,"14100":344400000,"1420":4984000000,"1430":4133899999.9999995,"1440":4900700000,"14400":760000000,"1450":1294600000,"14500":899900000,"1460":2644400000,"1470":5051900000,"14700":357000,"14800":291,"14900":14080200000,"150":3127700000,"1500":512100000,"15000":1818600000,"15100":476500,"15200":709300,"15300":150300,"15400":91603700,"15500":7084300000,"15600":11732,"15700":1,"15900":129699.99999999999,"160":5385000000,"1600":14753600,"16000":513200000.00000006,"16100":10979200000,"16200":154000,"16300":1471600,"16400":16113900000,"16500":691200000,"16600":1091200000,"16700":147500,"16900":306800,"170":9219000000,"1700":2071500000,"1710":1976100000,"1720":2013400000,"17200":1400700000,"17210":1362600000,"17220":1840300000,"17225":1945600000,"17230":3038000000,"1730":1917400000,"17300":1662900000,"1740":2008900000,"17400":1660100000,"1750":468800000,"17500":1662400000,"1760":955000000,"17600":1662300000,"1770":2051199999.9999998,"17700":1657800000,"17800":1654000000,"17900":1657500000,"1800":376900,"18000":1657400000,"18100":1592100000,"18200":983300000,"18300":153000,"18400":35960,"18500":2382600000,"18600":2388100,"18700":10174500000,"18800":613800,"18900":357400,"19000":13349000,"19100":4596200,"19200":1347900,"19300":771500000,"19500":77930300,"19600":1706600,"19700":858200,"19800":1704700,"19900":858300,"20":13208400000,"200":12258800000,"2000":55996700000,"20011":916600,"20012":438300,"20013":288500,"20200":41728,"20300":101500,"20400":55389,"20500":3045300000,"20510":3198600000,"20600":5357300,"20710":1740600000,"20720":837400000,"20800":4730400000,"20900":4504200000,"2100":700500,"21000":977900000,"21100":5953800000,"21200":7960500000,"21300":2414000000,"21400":2716100000,"21500":133100,"21501":133100,"21600":1012000,"21700":612400,"21800":583100,"22000":874700,"22001":113100,"22100":3032,"22200":2058100000,"22300":4632800000,"22400":362400,"22500":1517000000,"22600":253300,"22700":2263,"22911":501300000,"22921":1341600000,"22931":993800000,"22941":750200000,"22951":673000000,"23001":1758000000,"23002":1230800000,"23003":1194400000,"23100":3313400,"23200":1703800,"23300":1745700,"23400":30777,"23500":158900,"23600":80893,"23700":74708,"23800":67895,"23900":2515600,"2400":15490300000,"2410":10861400000,"24100":716000,"24200":204300,"24300":3925200000,"24410":1697800,"24420":1387800,"24500":3426,"24600":56240,"24700":11559100000,"24800":2559500000,"24900":14023100000,"25000":141600,"25100":239700,"25200":252500,"25300":22744,"25400":27636700,"25500":706600,"25600":76580,"25700":10444800000,"25800":76506,"25900":46825,"2600":9075400000,"26000":124700000,"26100":293000,"26200":85664800,"26300":1761500000,"26401":6289600000,"26402":5576700000,"26403":4491800000,"26500":77192,"26700":236900,"26800":237200,"26900":222000,"27000":1761800,"27100":1683300,"27200":8192299999.999999,"27300":222300,"27400":356900,"27500":10490,"27600":8091,"30":10277600000,"300":5443200000,"3000":2753900000,"3100":776700000,"3200":76838,"3500":6941000000,"3710":9072300000,"3800":10548900000,"3910":7589500000,"40":13008300000,"400":12458600,"4010":8152100000,"4110":8048400000,"4300":9744500000,"4400":6861000000,"4500":5288000000,"4510":4681500000,"4520":3173900000,"4700":7085400000,"4710":6243700000,"4800":11244800000,"4900":6789500000,"50":6509300000,"500":14735200,"5000":4081700000,"501":14740800,"5100":14423600000,"5200":2834500,"5300":1764600000,"5400":726900000,"5500":15925200000,"5600":2753900000,"5700":5272200000,"5800":9535200,"60":10917300000,"600":3551600000,"6000":7829500000,"6100":1032400000.0000001,"6211":665900,"6212":360000,"6213":247500,"6221":912700,"6222":431100,"6223":283800,"6231":132400,"6232":62532,"6233":41554,"6241":1209500,"6242":629600,"6243":426500,"6300":14732400,"6400":21167100,"6500":11282300,"6600":6180900,"6700":30097000,"6800":5301100,"6900":755300000,"70":14497400000,"7000":7482400000,"7200":104200,"7300":2271200000,"7400":495100,"7500":980700000,"7700":7174500000,"7701":7803500000,"7800":1702100000,"7801":1646500000,"7900":128199.99999999999,"8000":837400000,"8100":9103100000,"8200":26100,"8300":3412300000,"8400":2251500000,"8500":2566100000,"8600":470500000,"8700":220900000,"8800":1711500,"8900":566500,"900":17653700000,"9000":1569900,"9100":1401000,"9200":147300,"9300":31517,"9400":289700,"9500":145000,"9600":22177,"9700":877000000,"9710":1351200000,"9720":3323100000,"9800":903500000,"9810":1288200000,"9820":3853300000,"9900":12117900000,"99999":17401200000}, + "NVIDIA M60": {"0":3082700000,"10":2528900000,"100":2061300000.0000002,"1000":3315200000,"10000":28732,"10100":2630700000,"10200":1358100000,"10300":2340100,"10400":180000000,"10410":208600000,"10420":1870300000,"10500":6285700,"10600":1002800000,"10700":20148,"10800":392100000,"10810":343700000,"10820":348000000,"10830":338000000,"10840":346200000,"10870":385500000,"10900":580700,"110":1747600000,"1100":2462800000,"11000":2013400000,"11100":1761100000,"11200":858300000,"11300":2927,"11400":458500000,"11500":869500000,"11600":3303,"11700":24902300,"11750":7921300,"11760":10667000,"11800":24939300,"11850":6973700,"11860":9042000,"11900":3123500,"120":1831300000,"12000":1542700,"12100":223400,"12200":7079,"12300":55036,"12400":1756700,"12500":13849,"12600":725100000,"12700":13636800,"12800":4022800,"12900":147500,"130":1609900000,"1300":1088600000,"13000":18658,"13100":154400000,"13200":57814,"13300":1995600000,"13400":68806,"13500":1008400000,"13600":1514500,"13711":455,"13712":261,"13713":183,"13721":439,"13722":214,"13723":143,"13731":41,"13732":20,"13733":14,"13741":910,"13742":521,"13743":365,"13751":609,"13752":306,"13753":204,"13761":1522,"13762":764,"13763":510,"13800":269600000,"13900":778400000,"140":1821100000,"1400":1086400000,"14000":1121500000,"1410":1003300000,"14100":139800000,"1420":1006300000,"1430":944900000,"1440":1003200000,"14400":156700000,"1450":251600000,"14500":68639700,"1460":465800000,"1470":1075900000,"14700":85123,"14800":57,"14900":2262800000,"150":546100000,"1500":76149000,"15000":387600000,"15100":115100,"15200":168700,"15300":35542,"15400":68385600,"15500":1631800000,"15600":2338,"15700":0,"15900":27907,"160":1124600000,"1600":3547400,"16000":76195800,"16100":2533700000,"16200":30593,"16300":294900,"16400":3146300000,"16500":147100000,"16600":90230700,"16700":28681,"16900":60988,"170":1997400000,"1700":395200000,"1710":351000000,"1720":351200000,"17200":226200000,"17210":153900000,"17220":243900000,"17225":263500000,"17230":435400000,"1730":341600000,"17300":427700000,"1740":351500000,"17400":434900000,"1750":97098400,"17500":418000000,"1760":204200000,"17600":434700000,"1770":391300000,"17700":424900000,"17800":433100000,"17900":418400000,"1800":69189,"18000":436800000,"18100":306800000,"18200":152500000,"18300":30577,"18400":8576,"18500":471500000,"18600":361200,"18700":755900000,"18800":123200,"18900":85015,"19000":3228900,"19100":1164100,"19200":480600,"19300":118600000,"19500":18104700,"19600":408500,"19700":205300,"19800":408700,"19900":205300,"20":2598400000,"200":1501100000,"2000":4370100000,"20011":208000,"20012":98076,"20013":65071,"20200":9037,"20300":19806,"20400":13136,"20500":681200000,"20510":499700000,"20600":1145300,"20710":185300000,"20720":173800000,"20800":966400000,"20900":982100000,"2100":166600,"21000":196900000,"21100":1353600000,"21200":1559000000,"21300":486700000,"21400":564700000,"21500":32143,"21501":32174,"21600":222800,"21700":78159,"21800":69791,"22000":208600,"22001":76116,"22100":695,"22200":368500000,"22300":942000000,"22400":76674,"22500":218300000,"22600":60230,"22700":349,"22911":92334600,"22921":261200000,"22931":169700000,"22941":112200000,"22951":104200000,"23001":251500000,"23002":177200000,"23003":112000000,"23100":804200,"23200":408300,"23300":418300,"23400":6073,"23500":25436,"23600":13414,"23700":13851,"23800":13347,"23900":466700,"2400":2968000000,"2410":2427100000,"24100":170100,"24200":40706,"24300":976600000,"24410":405100,"24420":275100,"24500":733,"24600":13448,"24700":2183600000,"24800":562100000,"24900":2448400000,"25000":24098,"25100":42184,"25200":40962,"25300":4629,"25400":6341300,"25500":138900,"25600":10797,"25700":791200000,"25800":10800,"25900":9357,"2600":1975700000,"26000":21225800,"26100":57242,"26200":22132400,"26300":424400000,"26401":988600000,"26402":873100000,"26403":710000000,"26500":11592,"26700":40906,"26800":40956,"26900":37108,"27000":1512000,"27100":1604800,"27200":1846700000,"27300":36974,"27400":85401,"27500":2053,"27600":1617,"30":2288600000,"300":1257400000,"3000":479700000,"3100":165400000,"3200":10797,"3500":1447700000,"3710":1706700000,"3800":2284600000,"3910":1541700000,"40":2593600000,"400":3123900,"4010":1673800000,"4110":1499300000,"4300":1968700000,"4400":1500100000,"4500":1235000000,"4510":1087600000,"4520":768700000,"4700":1619000000,"4710":1401600000,"4800":2523000000,"4900":1693000000,"50":1359800000,"500":3538200,"5000":1042700000,"501":3544200,"5100":2860400000,"5200":581800,"5300":432900000,"5400":168900000,"5500":3184500000,"5600":535500000,"5700":1084200000,"5800":2504100,"60":2105900000,"600":820300000,"6000":1595000000,"6100":156100000,"6211":137000,"6212":76317,"6213":52931,"6221":207900,"6222":97924,"6223":64715,"6231":20176,"6232":10089,"6233":6718,"6241":259200,"6242":140900,"6243":96691,"6300":3545700,"6400":5772800,"6500":2669000,"6600":1547600,"6700":10536000,"6800":1106000,"6900":120200000,"70":2885600000,"7000":1834400000,"7200":22828,"7300":453800000,"7400":103700,"7500":151800000,"7700":985100000,"7701":1058200000,"7800":332700000,"7801":328600000,"7900":27627,"8000":183100000,"8100":2053500000,"8200":5664,"8300":738000000,"8400":445900000,"8500":412600000,"8600":58055300,"8700":33934300,"8800":413400,"8900":57841,"900":3499500000,"9000":229400,"9100":333600,"9200":28698,"9300":3552,"9400":70126,"9500":34985,"9600":4579,"9700":87837900,"9710":191100000,"9720":387600000,"9800":105800000,"9810":185500000,"9820":876400000,"9900":2272600000,"99999":3489900000}, + "NVIDIA T4": {"0":6210100000,"10":5250000000,"100":3582400000,"1000":6335000000,"10000":55846,"10100":4802700000,"10200":2401700000,"10300":3864100,"10400":462600000,"10410":518200000.00000006,"10420":3478400000,"10500":13656000,"10600":1844600000,"10700":35563,"10800":762000000,"10810":754300000,"10820":766200000,"10830":738600000,"10840":776800000,"10870":755400000,"10900":1123300,"110":3061700000,"1100":4248899999.9999995,"11000":4071700000,"11100":3177200000,"11200":1392100000,"11300":5464,"11400":944500000,"11500":3620600000,"11600":5621,"11700":40183100,"11750":14109900,"11760":19384300,"11800":40437300,"11850":12451800,"11860":16381400,"11900":5274000,"120":3134900000,"12000":2487900,"12100":413800,"12200":13237,"12300":102600,"12400":2595100,"12500":18813,"12600":1293000000,"12700":23762600,"12800":7819300,"12900":283200,"130":2792200000,"1300":1992200000,"13000":35689,"13100":385200000,"13200":91772,"13300":3358100000,"13400":111500,"13500":1835700000,"13600":2446900,"13711":797,"13712":471,"13713":329,"13721":846,"13722":425,"13723":272,"13731":63,"13732":31,"13733":21,"13741":1606,"13742":910,"13743":632,"13751":1177,"13752":600,"13753":401,"13761":2963,"13762":1435,"13763":948,"13800":586500000,"13900":1273900000,"140":3057600000,"1400":2020500000,"14000":1620500000,"1410":1818900000,"14100":278300000,"1420":1906800000,"1430":1757700000,"1440":1887300000,"14400":301600000,"1450":500100000,"14500":244400000,"1460":1004400000,"1470":1956700000,"14700":134800,"14800":110,"14900":4019600000,"150":1208300000,"1500":128900000,"15000":727300000,"15100":183500,"15200":268400,"15300":57226,"15400":138900000,"15500":2908300000,"15600":4499,"15700":1,"15900":52960,"160":2095199999.9999998,"1600":6843200,"16000":129500000,"16100":4374400000,"16200":58736,"16300":559400,"16400":5442100000,"16500":334200000,"16600":310000000,"16700":55149,"16900":118300,"170":3299700000,"1700":785800000,"1710":774400000,"1720":798200000,"17200":783500000,"17210":485000000,"17220":892900000,"17225":937500000,"17230":1273200000,"1730":743000000,"17300":621400000,"1740":784400000,"17400":623000000,"1750":179800000,"17500":628200000,"1760":389500000,"17600":622100000,"1770":779600000,"17700":622000000,"17800":619500000,"17900":624600000,"1800":105800,"18000":621900000,"18100":658100000,"18200":384900000,"18300":59023,"18400":13598,"18500":913200000,"18600":941800,"18700":5143500000,"18800":237200,"18900":134200,"19000":6959100,"19100":2654000,"19200":1067100,"19300":323900000,"19500":35670200,"19600":651600,"19700":327200,"19800":649900,"19900":327100,"20":4342700000,"200":4708400000,"2000":123300000000,"20011":383000,"20012":185800,"20013":121400,"20200":16759,"20300":37630,"20400":21000,"20500":1670800000,"20510":1360700000,"20600":2209600,"20710":647400000,"20720":397100000,"20800":1605100000,"20900":1536000000,"2100":265400,"21000":382200000,"21100":2417800000,"21200":2903200000,"21300":935800000,"21400":1031599999.9999999,"21500":49152,"21501":48442,"21600":416600,"21700":281300,"21800":288500,"22000":330100,"22001":182700,"22100":1312,"22200":780400000,"22300":1746200000,"22400":159000,"22500":403600000,"22600":96555,"22700":1194,"22911":239800000,"22921":625900000,"22931":400900000,"22941":306400000,"22951":275300000,"23001":518000000,"23002":407700000,"23003":348300000,"23100":1276200,"23200":648400,"23300":662100,"23400":11857,"23500":40678,"23600":20703,"23700":18988,"23800":18372,"23900":757800,"2400":5254700000,"2410":4569000000,"24100":273000,"24200":77786,"24300":1560400000,"24410":638300,"24420":529800,"24500":1326,"24600":21204,"24700":3876600000,"24800":1013200000,"24900":4760700000,"25000":40945,"25100":73701,"25200":78983,"25300":8550,"25400":13740400,"25500":266600,"25600":31105,"25700":5303700000,"25800":31101,"25900":17857,"2600":3328800000,"26000":63464400,"26100":110500,"26200":43336700,"26300":818600000,"26401":1470800000,"26402":1340800000,"26403":1082100000,"26500":18465,"26700":81451,"26800":82080,"26900":51701,"27000":2902600,"27100":2608300,"27200":3212300000,"27300":51722,"27400":135500,"27500":3935,"27600":3121,"30":4456600000,"300":1997700000,"3000":983800000,"3100":264500000,"3200":30886,"3500":2688000000,"3710":3243400000,"3800":4452300000,"3910":2906700000,"40":4911000000,"400":5001500,"4010":3099700000,"4110":2916700000,"4300":3331900000,"4400":2479300000,"4500":1843000000,"4510":1778500000,"4520":1230200000,"4700":2546500000,"4710":2467600000,"4800":4933500000,"4900":2662600000,"50":2408900000,"500":6900100,"5000":1666900000,"501":6828800,"5100":5019700000,"5200":1117200,"5300":690100000,"5400":296500000,"5500":5500000000,"5600":1057599999.9999999,"5700":2011200000,"5800":4094700,"60":3692000000,"600":1302300000,"6000":2901100000,"6100":253200000,"6211":251400,"6212":137900,"6213":95875,"6221":378400,"6222":183300,"6223":120000,"6231":34454,"6232":16664,"6233":11117,"6241":472000,"6242":250200,"6243":169200,"6300":6898500,"6400":10852100,"6500":5043400,"6600":2491000,"6700":18494900,"6800":2141400,"6900":187000000,"70":4945900000,"7000":2923800000,"7200":41433,"7300":876500000,"7400":207000,"7500":387000000,"7700":2026200000,"7701":2068000000,"7800":635600000,"7801":659300000,"7900":50745,"8000":316100000,"8100":3276600000,"8200":10474,"8300":1329200000,"8400":858800000,"8500":949600000,"8600":135300000,"8700":53691300,"8800":658000,"8900":285200,"900":6008700000,"9000":635600,"9100":531100,"9200":54356,"9300":17657,"9400":110200,"9500":54425,"9600":8672,"9700":348500000,"9710":458500000,"9720":1350300000,"9800":383000000,"9810":449600000,"9820":1799100000,"9900":3983800000,"99999":6425900000}, + "NVIDIA T4G": {"0":5686300000,"10":4519800000,"100":3442000000,"1000":6078300000,"10000":55889,"10100":5395800000,"10200":2380900000,"10300":3825900,"10400":431900000,"10410":482000000,"10420":3488100000,"10500":13287700,"10600":1827100000,"10700":31351,"10800":748400000,"10810":735800000,"10820":759100000,"10830":712600000,"10840":756300000,"10870":739700000,"10900":1082500,"110":3095200000,"1100":4262200000,"11000":4023000000,"11100":3100100000,"11200":1340800000,"11300":5319,"11400":924500000,"11500":3512900000,"11600":5470,"11700":39785800,"11750":13937300,"11760":18795400,"11800":39832400,"11850":12250300,"11860":15840200,"11900":5408600,"120":3215900000,"12000":2431400,"12100":392100,"12200":12899,"12300":98147,"12400":2605300,"12500":18422,"12600":1285800000,"12700":21942400,"12800":7304100,"12900":276200,"130":2862000000,"1300":1942000000,"13000":34831,"13100":363600000,"13200":91709,"13300":3279700000,"13400":108800,"13500":1775100000,"13600":2375300,"13711":795,"13712":476,"13713":334,"13721":854,"13722":424,"13723":266,"13731":63,"13732":31,"13733":20,"13741":1562,"13742":894,"13743":624,"13751":1142,"13752":557,"13753":375,"13761":2873,"13762":1411,"13763":940,"13800":570100000,"13900":1253500000,"140":3175700000,"1400":1962300000,"14000":1556800000,"1410":1838400000,"14100":273300000,"1420":1884400000,"1430":1748500000,"1440":1868600000,"14400":292400000,"1450":491100000,"14500":243000000,"1460":985500000,"1470":1889300000,"14700":131400,"14800":110,"14900":3955300000,"150":1176500000,"1500":128699999.99999999,"15000":704800000,"15100":177400,"15200":264600,"15300":54917,"15400":147800000,"15500":2875100000,"15600":4289,"15700":1,"15900":50083,"160":1998400000,"1600":6908300,"16000":131100000,"16100":4430600000,"16200":57511,"16300":551900,"16400":5640100000,"16500":328800000,"16600":303600000,"16700":55597,"16900":113800,"170":3249000000,"1700":755200000,"17010":1284300,"1710":741700000,"1720":769800000,"17200":750200000,"17210":475400000,"17220":876700000,"17225":928000000,"17230":1294400000,"1730":750600000,"17300":624000000,"1740":784800000,"17400":619100000,"1750":181400000,"17500":619300000,"1760":387400000,"17600":619200000,"1770":764000000,"17700":617700000,"17800":615800000,"17900":629200000,"1800":104400,"18000":627000000,"18100":672200000,"18200":369700000,"18300":59339,"18400":13697,"18500":936800000,"18600":678400,"18700":5014800000,"18800":233400,"18900":133000,"19000":7420400,"19100":2848300,"19200":1132500,"19300":321800000,"19500":39773200,"19600":630400,"19700":318600,"19800":633400,"19900":318500,"20":4551800000,"200":4435900000,"2000":11613300000000,"20011":363300,"20012":172400,"20013":115700,"20200":16497,"20300":38897,"20400":20999,"20500":1676300000,"20510":1353800000,"20600":2171600,"20710":631100000,"20720":385200000,"20800":1635500000,"20900":1531900000,"2100":259500,"21000":377900000,"21100":2337500000,"21200":2915200000,"21300":909500000,"21400":1013100000,"21500":47566,"21501":47948,"21600":394400,"21700":271000,"21800":265200,"22000":320100,"22001":119000,"22100":1255,"22200":762600000,"22300":1739800000,"22400":154600,"22500":397400000,"22600":94252,"22700":1187,"22911":236600000,"22921":636600000,"22931":412900000,"22941":304300000,"22951":264600000.00000003,"23001":516000000,"23002":410900000,"23003":340600000,"23100":1264900,"23200":635200,"23300":650700,"23500":40115,"23600":20413,"23700":18507,"23900":753600,"2400":5419300000,"2410":4284600000.0000005,"24100":264800,"24200":76247,"24300":1598100000,"24410":631900,"24420":527300,"24500":1243,"24600":20862,"24700":3805900000,"24800":1007200000,"24900":4840400000,"25000":36173,"25100":74133,"25200":77856,"25300":8667,"25400":13367800,"25500":270000,"25600":28716,"25700":5811500000,"25800":28720,"25900":18220,"2600":3484800000,"26000":77078800,"26100":115100,"26200":43314500,"26300":835700000,"26401":1503600000,"26402":1355800000,"26403":1094600000,"26500":18531,"26600":112200,"26700":82165,"26800":82931,"26900":52316,"27000":2989500,"27100":2897100,"27200":3311900000,"27300":50481,"27400":133400,"27500":4037,"27600":3116,"27700":1211,"27800":5396300000,"27900":3901000000,"28000":6288400000,"28100":110600,"30":4054600000,"300":1908000000,"3000":1001500000,"3100":261899999.99999997,"3200":28710,"3500":2625000000,"3710":3354400000,"3800":3749500000,"3910":2888800000,"40":4481700000,"400":5256700,"4010":3108000000,"4110":2956400000,"4300":3394800000,"4400":2423700000,"4500":1808200000,"4510":1734800000,"4520":1245700000,"4700":2574800000,"4710":2360500000,"4800":4615700000,"4900":2809400000,"50":2382400000,"500":6768100,"5000":1626100000,"501":6838800,"5100":5076100000,"5200":1101000,"5300":669200000,"5400":282900000,"5500":5770800000,"5600":1037400000.0000001,"5700":1963900000,"5800":3975400,"60":3873400000,"600":1288300000,"6000":2904000000,"6100":250000000,"6211":243500,"6212":133900,"6213":92433,"6221":363100,"6222":172600,"6223":115000,"6231":32401,"6232":16003,"6233":10702,"6241":454600,"6242":244200,"6243":168300,"6300":6741200,"6400":10744200,"6500":4843700,"6600":2436300,"6700":18391500,"6800":2059000,"6900":184800000,"70":4972300000,"7000":2913000000,"7200":40628,"7300":849500000,"7400":207400,"7500":369700000,"7700":1699800000,"7701":2136800000.0000002,"7800":648700000,"7801":643100000,"7900":49989,"8000":310100000,"8100":3438000000,"8200":10259,"8300":1292800000,"8400":834700000,"8500":947400000,"8600":135500000,"8700":52462500,"8800":646000,"8900":284900,"900":6290800000,"9000":585000,"9100":526800,"9200":57077,"9300":17745,"9400":109900,"9500":54784,"9600":8741,"9700":345700000,"9710":452900000,"9720":1345500000,"9800":371900000,"9810":440100000,"9820":1786000000,"9900":4027800000,"99999":6344600000}, + "NVIDIA A100": {}, + "NVIDIA A10G": {"0":18520600000,"10":15495500000,"100":11397400000,"1000":20180500000,"10000":167800,"10100":16862599999.999998,"10200":8160200000,"10300":10925500,"10400":1585000000,"10410":1632300000,"10420":12100200000,"10500":36809800,"10600":6373100000,"10700":151300,"10800":2579400000,"10810":2537600000,"10820":2530600000,"10830":2509100000,"10840":2522800000,"10870":2544600000,"10900":3299200,"110":10724700000,"1100":14530100000,"11000":13350800000,"11100":11389600000,"11200":4620400000,"11300":16539,"11400":2563100000,"11500":10250200000,"11600":16167,"11700":186200000,"11750":66689600.00000001,"11760":91568000,"11800":186100000,"11850":58497500,"11860":76600900,"11900":15865800,"120":10668700000,"12000":7260800,"12100":1238900,"12200":40406,"12300":309900,"12400":11810600,"12500":56675,"12600":4340200000,"12700":55018500,"12800":22136000,"12900":849700,"130":10333200000,"1300":6646400000,"13000":107800,"13100":1310600000,"13200":428500,"13300":11017700000,"13400":509100,"13500":5963600000,"13600":6991400,"13711":2495,"13712":1427,"13713":1000,"13721":2502,"13722":1260,"13723":838,"13731":299,"13732":138,"13733":92,"13741":4993,"13742":2852,"13743":2000,"13751":3469,"13752":1738,"13753":1158,"13761":8675,"13762":4345,"13763":2896,"13800":2049800000.0000002,"13900":4349000000,"140":10489000000,"1400":6762300000,"14000":6809900000,"1410":6375600000,"14100":496700000,"1420":6261400000,"1430":6193200000,"1440":6254700000,"14400":938700000,"1450":1633800000,"14500":710800000,"1460":3317000000,"1470":6501600000,"14700":406500,"14800":332,"14900":12190500000,"150":4015900000,"1500":604100000,"15000":2341900000,"15100":540500,"15200":808000,"15300":170800,"15400":181400000,"15500":10050400000,"15600":13516,"15700":1,"15900":159300,"160":6812700000,"1600":19385500,"16000":603400000,"16100":15735200000,"16200":176700,"16300":1698200,"16400":19303000000,"16500":1536800000,"16600":1684700000,"16700":167800,"16900":351900,"170":11006800000,"1700":2608000000,"1710":2560700000,"1720":2565900000,"17200":1807600000,"17210":1484800000,"17220":2265500000,"17225":2255200000,"17230":2144500000,"1730":2535700000,"17300":1850800000,"1740":2555600000,"17400":1851000000,"1750":625600000,"17500":1844500000,"1760":1242400000,"17600":1845900000,"1770":2571900000,"17700":1851800000,"17800":1850400000,"17900":1844500000,"1800":344500,"18000":1845300000,"18100":2072000000,"18200":1315100000,"18300":176600,"18400":41027,"18500":2475600000,"18600":3046000,"18700":13345800000,"18800":696200,"18900":407300,"19000":17795200,"19100":6924700,"19200":4437900,"19300":1156900000,"19500":161600000,"19600":1940400,"19700":980800,"19800":1940100,"19900":982000,"20":15378900000,"200":14712800000,"2000":88917500000,"20011":1095700,"20012":524500,"20013":344800,"20200":51096,"20300":115800,"20400":62878,"20500":2824200000,"20510":2328500000,"20600":6219900,"20710":2155500000,"20720":1494400000,"20800":5701300000,"20900":5372700000,"2100":796700,"21000":1284200000,"21100":8226600000,"21200":9963200000,"21300":2635900000,"21400":3457400000,"21500":154100,"21501":154200,"21600":1239500,"21700":787400,"21800":842200,"22000":987200,"22001":133500,"22100":3884,"22200":2590800000,"22300":6096100000,"22400":431400,"22500":2030100000,"22600":291200,"22700":3129,"22911":775000000,"22921":1845600000,"22931":1889200000,"22941":1645300000,"22951":1397500000,"23001":2828600000,"23002":2116900000,"23003":1780000000,"23100":3806600,"23200":1940600,"23300":1990000,"23400":35551,"23500":180300,"23600":93963,"23700":56715,"23800":51028,"23900":1779000,"2400":18438800000,"2410":15657800000,"24100":813500,"24200":235400,"24300":5624000000,"24410":1925900,"24420":1596400,"24500":4208,"24600":64101,"24700":13164500000,"24800":3452100000,"24900":16436599999.999998,"25000":87091,"25100":157800,"25200":157900,"25300":26415,"25400":36947200,"25500":808500,"25600":95163,"25700":13780100000,"25800":95132,"25900":54060,"2600":12469900000,"26000":142300000,"26100":334600,"26200":94279800,"26300":2378600000,"26401":7381400000,"26402":6509800000,"26403":5357000000,"26500":86284,"26700":150100,"26800":150100,"26900":169900,"27000":1917700,"27100":1874100,"27200":10282000000,"27300":168800,"27400":407100,"27500":12016,"27600":9371,"30":14465800000,"300":6666700000,"3000":2818600000,"3100":1174800000,"3200":93666,"3500":9117600000,"3710":11569700000,"3800":13994400000,"3910":9789200000,"40":14880400000,"400":15409000,"4010":10479900000,"4110":10158400000,"4300":12475200000,"4400":8241799999.999999,"4500":6438600000,"4510":6176700000,"4520":4232800000,"4700":8686100000,"4710":8186800000,"4800":15919800000,"4900":10078400000,"50":8160500000,"500":19360300,"5000":5981100000,"501":19355700,"5100":17565000000,"5200":3267400,"5300":2266200000,"5400":1008000000,"5500":19956400000,"5600":3586800000,"5700":6749100000,"5800":11601200,"60":12504100000,"600":4555500000,"6000":9510800000,"6100":1244900000,"6211":749400,"6212":407000,"6213":279400,"6221":1094300,"6222":523400,"6223":344600,"6231":148000,"6232":73187,"6233":49015,"6241":1363800,"6242":710500,"6243":480600,"6300":19365300,"6400":29128100,"6500":14554900,"6600":7242800,"6700":44384000,"6800":6257500,"6900":907700000,"70":16983900000.000002,"7000":10389200000,"7200":127500,"7300":2937200000,"7400":652700,"7500":1345500000,"7700":7117100000,"7701":8671700000,"7800":1839900000,"7801":1787000000,"7900":147800,"8000":1104900000,"8100":11468200000,"8200":31916,"8300":4700200000,"8400":2933700000,"8500":2567100000,"8600":540600000,"8700":252800000,"8800":1976000,"8900":719000,"900":20524300000,"9000":1925500,"9100":1590400,"9200":167800,"9300":36814,"9400":326800,"9500":164900,"9600":26032,"9700":993300000,"9710":1464200000,"9720":4026400000,"9800":1268900000,"9810":1411600000,"9820":6248900000,"9900":13853500000,"99999":21124800000}, + "Radeon Pro V520": {"0":5521650000,"10":2968850000,"100":3912050000,"10000":61724,"10100":1930950000,"10200":2239600000,"10300":4097850,"10400":361600000,"10410":398650000,"10420":3397100000,"10500":15226350,"10600":1666200000,"10800":764200000,"10810":679550000,"10820":756550000,"10900":1111550,"110":2780800000,"11000":3828950000,"11100":2627300000,"11200":1731950000,"11300":5077,"11400":846700000,"11500":5080700000,"11600":254,"11700":47219700,"11750":14674050,"11760":19993700,"11800":44968700,"11850":13066400,"11860":15422300,"11900":4512400,"120":3730950000,"12000":2665800,"12100":374150,"12200":12305.5,"12300":94952,"12400":3188300,"12500":26326.5,"12600":1581200000,"12700":14468300,"12800":7251700,"12900":303300,"1300":2263900000,"13000":38481.5,"13100":302100000,"13200":103650,"13300":3791800000,"13400":125900,"13600":2342800,"13711":742,"13712":422.5,"13713":296.5,"13721":780,"13722":387.5,"13723":259,"13731":3,"13732":1.5,"13733":1,"13741":1484,"13742":851,"13743":596.5,"13751":1231,"13752":617.5,"13753":411,"13761":3077.5,"13762":1546.5,"13763":1031.5,"13900":1675600000,"1400":2298950000,"14000":2521650000,"1410":1668900000,"14100":193200000,"1420":2217950000,"14400":356100000,"1450":580600000,"14500":389500000,"1460":1139900000,"14700":154500,"14800":124,"14900":3718300000,"150":1418600000,"1500":137900000,"15000":659700000,"15100":206500,"15200":308600,"15300":66481,"15400":58286350,"15600":4810,"15700":1,"15900":48718,"160":2408950000,"1600":6984750,"16000":137700000,"16100":4411100000,"16200":63422.5,"16300":608800,"16400":5657200000,"16500":443150000,"16600":382800000,"16700":62074.5,"16900":125200,"1700":768950000,"1710":667800000,"1720":761350000,"17210":291700000,"17230":687600000,"17300":490050000,"17400":490100000,"1750":182100000,"17500":490450000,"1760":374550000,"17600":490100000,"17700":490350000,"17800":490400000,"17900":490750000,"1800":150900,"18000":490300000,"18100":799300000,"18200":298600000,"18300":63384.5,"18400":15645.5,"18500":849000000,"18600":790400,"18700":3426100000,"18800":254050,"18900":155600,"19000":4397850,"19100":2295650,"19200":1116900,"19300":454800000,"19500":87850900,"19600":735700,"19700":373650,"19800":736450,"19900":373900,"20":5014400000,"200":5533050000,"2000":4399600000,"20011":373150,"20012":187500,"20013":123200,"20200":15642,"20300":42674.5,"20400":23802,"20500":820000000,"20510":682550000,"20600":2394600,"20710":696800000,"20720":593200000,"20800":1921950000,"20900":1802550000,"2100":303150,"21000":393250000,"21100":1870950000,"21200":2719150000,"21300":387571900,"21400":1222100000,"21500":50443.5,"21501":50508.5,"21600":374600,"21700":241400,"22000":375050,"22001":22098.5,"22100":1428.5,"22200":775800000,"22300":1620900000,"22400":176550,"22500":525400000,"22600":108650,"22700":494,"22911":215300000,"22921":597500000,"22931":419450000,"22941":272900000,"22951":231750000,"23001":759850000,"23002":562150000,"23003":368350000,"23100":1418200,"23200":731000,"23300":760100,"23400":12700,"23500":45730.5,"23600":24664,"23700":26248.5,"23800":25982,"23900":1144500,"2400":5548650000,"2410":4823900000,"24100":310050,"24200":84434,"24300":1485650000,"24410":727800,"24420":585450,"24500":1302.5,"24600":24423,"24700":3845900000,"24900":5433700000,"25000":65018.5,"25100":118750,"25200":124600,"25300":8052,"25400":15191300,"25500":303350,"25600":19174,"25700":4402750000,"25800":19152.5,"25900":19300,"2600":3398600000,"26000":138900000,"26100":123650,"26200":99857700,"26300":807350000,"26401":1929750000,"26402":1703700000,"26403":1381100000,"26500":21236.5,"26700":110150,"26800":109950,"26900":83907,"27000":570050,"27100":539400,"27200":3508900000,"27300":83918.5,"27400":154700,"27500":4406,"27600":3419,"300":2382450000,"3000":909900000,"3100":371850000,"3200":19270,"3500":2639050000,"3710":3357000000,"3800":3079950000,"3910":2702600000,"400":5498750,"4010":3136300000,"4110":2721200000,"4300":3398500000,"4400":2801150000,"4500":2341650000,"4510":2252150000,"4520":1602650000,"4700":2875100000,"4710":2609000000,"4800":4665850000,"4900":2245250000,"50":2241050000,"500":6978850,"5000":1593050000,"501":6982100,"5100":4961700000,"5200":1206600,"5300":661750000,"5400":368500000,"5700":2301850000,"5800":5064650,"60":3635050000,"600":1506950000,"6000":2777450000,"6100":276200000,"6211":236200,"6212":133950,"6213":93712,"6221":372350,"6222":187050,"6223":124450,"6231":21088,"6232":10686,"6233":6813,"6241":439000,"6242":244550,"6243":172950,"6300":6984900,"6400":9820050,"6500":4303850,"6600":2807300,"6700":17158750,"6800":2164250,"6900":225050000,"7000":3493250000,"7200":39182,"7300":1062550000,"7400":242450,"7700":2602800000,"7701":2599300000,"7800":1114400000,"7801":1027500000,"7900":51192,"8100":3938800000,"8200":9777.5,"8300":1581250000,"8400":1124350000,"8500":903100000,"8600":91413350,"8700":65507000,"8800":755000,"8900":140900,"900":6549650000,"9000":412800,"9100":612150,"9200":61739,"9300":1510.5,"9400":124700,"9500":62445,"9600":8009,"9710":340550000,"9810":360300000,"9900":3963250000,"99999":6550550000} + }, + + gpuSpeeds: {}, pricing: new AWS.Pricing({ apiVersion: '2017-10-15', region: 'us-east-1' }), - ec2e1: new AWS.EC2({ - apiVersion: '2016-11-15', - region: 'us-east-1' - }), + clients: Object.keys(REGIONS).reduce((acc, cur) => { + acc[cur] = new AWS.EC2({ + apiVersion: '2016-11-15', + region: cur + }); - ec2e2: new AWS.EC2({ - apiVersion: '2016-11-15', - region: 'us-east-2' - }), + return acc; + }, {}), - ec2w1: new AWS.EC2({ - apiVersion: '2016-11-15', - region: 'us-west-1' - }), + spotPrice: {}, + spotPriceHistory: Object.keys(REGIONS).reduce((acc, cur) => { + acc[cur] = {}; - ec2w2: new AWS.EC2({ - apiVersion: '2016-11-15', - region: 'us-west-2' - }), + return acc; + }, {}), - spotPrice: {}, - spotPriceHistory: { - "us-west-1": {}, - "us-west-2": {}, - "us-east-1": {}, - "us-east-2": {} + getFamilySpotPriceHistory: async function(family) { + self = this; + + const result = { [family]: [] }; + + for (let region of FAMILYREGIONS[family]) { + const instanceTypes = Object.keys(FAMILIES[family].instances).reduce((names, name) => { + if (!QUOTAS?.[region]?.[FAMILIES[family].quotaCode]) { + return names; + } + + if (FAMILIES[family].instances[name][1] <= QUOTAS[region][FAMILIES[family].quotaCode]) { + names.push(name); + } + + return names; + }, []); + + let price = await Promise.all(instanceTypes.map((name) => { + return self.getSpotPriceHistory(name, region).then((data) => { + data.instanceType = name; + data.limit = Math.floor(QUOTAS[region][FAMILIES[family].quotaCode] / FAMILIES[family].instances[name][1]); + + return data; + }); + })); + + price = price.reduce((all, current) => { + if (!!current.price) { + all.push(current); + } + + return all; + }, []).sort((a, b) => a.price - b.price); + + if (price.length > 0) { + result[family].push({ + region, + quota: QUOTAS[region][FAMILIES[family].quotaCode], + instances: price + }); + } + } + + return result; }, + getSpotPriceHistory: function (instanceType, forceRegion) { var self = this; - /* - if (typeof self.spotPrice[instanceType] != "undefined") { - return self.spotPrice[instanceType]; + if (!!!forceRegion && !!self?.spotPrice?.[instanceType]) { + return Promise.resolve(self.spotPrice[instanceType]); } - */ - - var regions = []; - switch (forceRegion) { - case "us-west-1": - regions.push(self.ec2w1); - break; - - case "us-west-2": - regions.push(self.ec2w2); - break; - - case "us-east-1": - regions.push(self.ec2e1); - break; - - case "us-east-2": - // regions.push(self.ec2e2); - alert('us-east-2 is currently not supported by NVidia'); - break; - - default: - regions = [ - self.ec2w1, - self.ec2w2, - self.ec2e1, - //self.ec2e2 - ]; - break; + + var regions = this.clients; + if (!!forceRegion) { + regions = [this.clients[forceRegion]] } var promises = []; - regions.forEach(function (e) { + for (let name in regions) { promises.push(new Promise(function(resolve, reject) { - if (typeof self.spotPriceHistory[e.config.region][instanceType] != "undefined") { - resolve(self.spotPriceHistory[e.config.region][instanceType]); + if (typeof self.spotPriceHistory[regions[name].config.region][instanceType] != "undefined") { + resolve(self.spotPriceHistory[regions[name].config.region][instanceType]); } - e.describeSpotPriceHistory({ + + regions[name].describeSpotPriceHistory({ StartTime: Math.round(Date.now() / 1000), EndTime: Math.round(Date.now() / 1000), InstanceTypes: [ @@ -123,11 +130,11 @@ angular reject(err); } - self.spotPriceHistory[e.config.region][instanceType] = data; + self.spotPriceHistory[regions[name].config.region][instanceType] = data; resolve(data); }); })); - }); + }; return Promise.all(promises).then((data) => { var results = { diff --git a/site-content/angular/services/userSvc.js b/site-content/angular/services/userSvc.js index 24afaee..47394b7 100644 --- a/site-content/angular/services/userSvc.js +++ b/site-content/angular/services/userSvc.js @@ -1,6 +1,6 @@ angular .module('app') - .service('userSvc', ['COGNITO_CONFIG', 'COGNITO_CREDENTIALS', 'cognito', function(COGNITO_CONFIG, COGNITO_CREDENTIALS, cognitoSvc) { + .service('userSvc', ['COGNITO_CONFIG', 'COGNITO_CREDENTIALS', 'cognito', 'USERDATA_BUCKET', function(COGNITO_CONFIG, COGNITO_CREDENTIALS, cognitoSvc, USERDATA_BUCKET) { if (!cognitoSvc.isAdmin()) { return {}; } @@ -9,12 +9,12 @@ angular cognitoIdp: new AWS.CognitoIdentityServiceProvider({ apiVersion: '2016-04-18', - region: 'us-west-2' + region: USERDATA_BUCKET.region }), cognitoIdentity: new AWS.CognitoIdentity({ apiVersion: '2014-06-30', - region: 'us-west-2' + region: USERDATA_BUCKET.region }), users: [], diff --git a/site-content/assets/css/app-style.css b/site-content/assets/css/app-style.css index 9dc86a8..4e2c062 100644 --- a/site-content/assets/css/app-style.css +++ b/site-content/assets/css/app-style.css @@ -4603,10 +4603,10 @@ form.striped-rows .form-group { animation: ripple .2s linear forwards; } [type=radio].with-gap:checked+label:after, [type=radio].with-gap:checked+label:before, [type=radio]:checked+label:after { - border: 2px solid #389af0; + border: 2px solid var(--gray-dark); } [type=radio].with-gap:checked+label:after, [type=radio]:checked+label:after { - background-color: #389af0; + background-color: var(--gray-dark); z-index: 0; } [type=radio]:checked+label:after { diff --git a/site-content/assets/images/logo-icon.png b/site-content/assets/images/logo-icon.png old mode 100755 new mode 100644 diff --git a/site-content/assets/images/squares.gif b/site-content/assets/images/squares.gif new file mode 100644 index 0000000..5888a41 Binary files /dev/null and b/site-content/assets/images/squares.gif differ diff --git a/site-content/assets/js/dictionary-buckets.js b/site-content/assets/js/dictionary-buckets.js deleted file mode 100755 index dab726d..0000000 --- a/site-content/assets/js/dictionary-buckets.js +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('app').constant('DICTIONARY_BUCKETS', { - "us-east-1": "npk-dictionary-east-1-20181029005812833000000004", - "us-east-2": "npk-dictionary-east-2-20181029005812776500000003", - "us-west-1": "npk-dictionary-west-1-20181029005812746900000001", - "us-west-2": "npk-dictionary-west-2-20181029005812750900000002" -}); \ No newline at end of file diff --git a/site-content/index.html b/site-content/index.html index 365b88f..1271902 100644 --- a/site-content/index.html +++ b/site-content/index.html @@ -101,7 +101,6 @@
NPK Github Wiki
  • - +
    -
    Join the NPK Discord!
    +
    Join the new NPK Discord!

    - +

    diff --git a/sonnetry_modules/modules.js b/sonnetry_modules/modules.js new file mode 100644 index 0000000..276eaad --- /dev/null +++ b/sonnetry_modules/modules.js @@ -0,0 +1 @@ +exports.random = [() => Math.random().toString().split('.')[1]]; \ No newline at end of file diff --git a/templates/dictionaries.auto.tfvars.tpl b/templates/dictionaries.auto.tfvars.tpl new file mode 100644 index 0000000..fde6f11 --- /dev/null +++ b/templates/dictionaries.auto.tfvars.tpl @@ -0,0 +1,10 @@ +/* + DO NOT EDIT THIS FILE MANUALLY + - Unless you *actually* know - + - what you're doing. - +*/ + +/* Dictionaries Variables */ + +dictionaryBucket = "${dictionaryBucket}" +dictionaryBucketRegion = "${dictionaryBucketRegion}" \ No newline at end of file diff --git a/terraform/templates/npk_config.tpl b/templates/npk_config.tpl similarity index 53% rename from terraform/templates/npk_config.tpl rename to templates/npk_config.tpl index 97cf426..44ea249 100644 --- a/terraform/templates/npk_config.tpl +++ b/templates/npk_config.tpl @@ -8,19 +8,26 @@ angular.module('app') .constant('COGNITO_CREDENTIALS', { "IdentityPoolId": "${identity_pool_id}", "Logins": { - 'cognito-idp.us-west-2.amazonaws.com/${user_pool_id}': "" + 'cognito-idp.${primary_region}.amazonaws.com/${user_pool_id}': "" } }) + .constant('DICTIONARY_BUCKET', { + name: "${dictionary_bucket}", + region: "${primary_region}" + }) .constant('SAMLSSO', { "useSamlSSO": "${use_SAML}", "SAMLDomain": "${saml_domain}", "SAMLRedirectUrl": "${saml_redirect}", "SAMLIdp": "NPKSAML" }) - .constant('QUOTAS', { - "gQuota": "${g_quota}", - "pQuota": "${p_quota}" + .constant('FAMILYREGIONS', ${familyRegions}) + .constant('FAMILIES', ${families}) + .constant('QUOTAS', ${quotas}) + .constant('REGIONS', ${regions}) + .constant('USERDATA_BUCKET', { + name: "${userdata_bucket}", + region: "${primary_region}" }) - .constant('USERDATA_BUCKET', "${userdata_bucket}") .constant('APIGATEWAY_URL', "${api_gateway_url}") ; \ No newline at end of file diff --git a/terraform-selfhost/templates/sync_npkcomponents.sh.tpl b/templates/sync_npkcomponents.sh.tpl similarity index 54% rename from terraform-selfhost/templates/sync_npkcomponents.sh.tpl rename to templates/sync_npkcomponents.sh.tpl index 6a80477..59563a0 100644 --- a/terraform-selfhost/templates/sync_npkcomponents.sh.tpl +++ b/templates/sync_npkcomponents.sh.tpl @@ -20,22 +20,7 @@ export AWS_DEFAULT_REGION=us-west-2 export AWS_DEFAULT_OUTPUT=json export AWS_PROFILE=$(jq -r '.awsProfile' ../terraform/npk-settings.json) -BUCKET1=${de1} -REGION1="us-east-1" - -BUCKET2=${de2} -REGION2="us-east-2" - -BUCKET3=${dw1} -REGION3="us-west-1" - -BUCKET4=${dw2} -REGION4="us-west-2" - echo "- syncing upstream S3 to selfhosted buckets." -aws s3 sync s3://npk-dictionary-east-1-20181029005812833000000004 s3://$BUCKET1 --region $REGION1 -aws s3 sync s3://npk-dictionary-east-2-20181029005812776500000003 s3://$BUCKET2 --region $REGION2 -aws s3 sync s3://npk-dictionary-west-1-20181029005812746900000001 s3://$BUCKET3 --region $REGION3 -aws s3 sync s3://npk-dictionary-west-2-20181029005812750900000002 s3://$BUCKET4 --region $REGION4 +aws s3 sync s3://npk-dictionary-west-2-20181029005812750900000002 s3://${dictionaryBucket} --source-region us-west-2 --region ${dictionaryBucketRegion} echo "- buckets synced." \ No newline at end of file diff --git a/terraform-selfhost/templates/upload_npkcomponents.sh.tpl b/templates/upload_npkcomponents.sh.tpl similarity index 52% rename from terraform-selfhost/templates/upload_npkcomponents.sh.tpl rename to templates/upload_npkcomponents.sh.tpl index 1e6aaa5..caaef02 100644 --- a/terraform-selfhost/templates/upload_npkcomponents.sh.tpl +++ b/templates/upload_npkcomponents.sh.tpl @@ -20,38 +20,19 @@ export AWS_DEFAULT_REGION=us-west-2 export AWS_DEFAULT_OUTPUT=json export AWS_PROFILE=$(jq -r '.awsProfile' ../terraform/npk-settings.json) -BUCKET1=${de1} -REGION1="us-east-1" - -BUCKET2=${de2} -REGION2="us-east-2" - -BUCKET3=${dw1} -REGION3="us-west-1" - -BUCKET4=${dw2} -REGION4="us-west-2" - -# echo "- Downloading components" +echo "- Downloading components" # if [ ! -f ${basepath}/components/hashcat.7z ]; then -# wget -O ${basepath}/components/hashcat.7z https://hashcat.net/files/hashcat-6.1.1.7z +# wget -O ${basepath}/components/hashcat.7z https://hashcat.net/files/hashcat-6.2.4.7z # fi # if [ ! -f ${basepath}/components/maskprocessor.7z ]; then # wget -O ${basepath}/components/maskprocessor.7z https://github.com/hashcat/maskprocessor/releases/download/v0.73/maskprocessor-0.73.7z # fi -# if [ ! -f ${basepath}/components/epel.rpm ]; then -# wget -O ${basepath}/components/epel.rpm https://npk-dictionary-east-1-20181029005812833000000004.s3.us-east-1.amazonaws.com/components/epel.rpm -# fi - 7z a components/compute-node.7z compute-node/ echo "- Uploading to S3" -aws s3 sync ${basepath}/components/ s3://$BUCKET1/components-v2/ $${@:1} --region $REGION1 -aws s3 sync ${basepath}/components/ s3://$BUCKET2/components-v2/ $${@:1} --region $REGION2 -aws s3 sync ${basepath}/components/ s3://$BUCKET3/components-v2/ $${@:1} --region $REGION3 -aws s3 sync ${basepath}/components/ s3://$BUCKET4/components-v2/ $${@:1} --region $REGION4 +aws s3 sync ${basepath}/components/ s3://${dictionaryBucket}/components-v3/ $${@:1} --region ${dictionaryBucketRegion} echo -e "Done.\n\n" \ No newline at end of file diff --git a/templates/upload_npkfile.sh.tpl b/templates/upload_npkfile.sh.tpl new file mode 100644 index 0000000..412e589 --- /dev/null +++ b/templates/upload_npkfile.sh.tpl @@ -0,0 +1,46 @@ +#! /bin/bash + +ERR=0; +if [[ ! -f $(which 7z) ]]; then + ERR=1; + echo "Error: Must have '7z' command installed."; +fi + +if [[ ! -f $(which aws) ]]; then + ERR=1; + echo "Error: Must have AWSCLI installed."; +fi + +if [[ "$1" != "wordlist" && "$1" != "rules" ]]; then + echo "Error: must be 'wordlist' or 'rules'" + ERR=1 +fi + +if [[ $# -lt 2 ]]; then + ERR=1 +fi + +if [[ "$ERR" == "1" ]]; then + echo -e "\nSyntax: $0 [...]\n" + exit 1 +fi + +export AWS_DEFAULT_REGION=us-west-2 +export AWS_DEFAULT_OUTPUT=json +export AWS_PROFILE=$(jq -r '.awsProfile' ../terraform/npk-settings.json) + +FILENAME=$(echo $${2##*/}) +echo "Processing $1 $FILENAME" +ARCHIVE=$(echo $${FILENAME%.*}).7z +echo "- Counting lines" +FILELINES=$(wc -l $2 | cut -d" " -f1) +SIZE=$(ls -al $2 | cut -d" " -f5) +echo "- Compressing" +7z a $ARCHIVE $2 + +echo "- Uploading to S3" +aws s3 cp $ARCHIVE s3://${dictionaryBucket}/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region ${dictionaryBucketRegion} + +rm $ARCHIVE + +echo -e "Done.\n\n" \ No newline at end of file diff --git a/templates/userdata.tpl b/templates/userdata.tpl new file mode 100644 index 0000000..2767039 --- /dev/null +++ b/templates/userdata.tpl @@ -0,0 +1,196 @@ +#! /bin/bash +cd /root/ + +echo {{APIGATEWAY}} > /root/apigateway + +export APIGATEWAY=$(cat /root/apigateway) +export USERDATA=${userdata} +export USERDATAREGION=${userdataRegion} +export INSTANCEID=`wget -qO- http://169.254.169.254/latest/meta-data/instance-id` +export REGION=`wget -qO- http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'` +aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCEID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/\1="\2"/' | sed -r 's/aws:ec2spot:fleet-request-id/SpotFleet/' > ec2-tags + +. ec2-tags + +# This is required for the wrapper to get anything done. +export ManifestPath=$ManifestPath +echo $ManifestPath > /root/manifestpath + +if [[ -f $(which yum) ]]; then + yum install -y jq +else + apt-get update + apt-get install -y jq wget p7zip-full maskprocessor +fi + +export BUCKET=${dictionaryBucket} +export BUCKETREGION=${userdataRegion} + +echo "Using dictionary bucket $BUCKET"; + +mkdir /potfiles + +# format & mount /dev/xvdb +if [[ -e /dev/xvdb ]]; then + mkfs.ext4 /dev/xvdb + mkdir /xvdb + mount /dev/xvdb /xvdb/ + mkdir /xvdb/npk-wordlist + ln -s /xvdb/npk-wordlist /root/npk-wordlist +else + mkfs.ext4 /dev/nvme1n1 + mkdir /nvme1n1 + mount /dev/nvme1n1 /nvme1n1/ + mkdir /nvme1n1/npk-wordlist + ln -s /nvme1n1/npk-wordlist /root/npk-wordlist +fi; + +aws s3 cp s3://$BUCKET/components-v3/compute-node.7z . +aws s3 cp s3://$USERDATA/$ManifestPath/manifest.json . + +if [[ -f $(which yum) ]]; then + aws s3 cp s3://$BUCKET/components-v3/epel.rpm . + rpm -Uvh epel.rpm + yum install -y p7zip p7zip-plugins +fi + +if [[ `lspci | grep AMD | wc -l` -gt 0 ]]; then + yum install -y opencl-amdgpu-pro +fi + +# Install nvm +curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | /bin/bash + +mv /.nvm /root/ +[ -s "/root/.nvm/nvm.sh" ] && \. "/root/.nvm/nvm.sh" +[ -s "/root/.nvm/bash_completion" ] && \. "/root/.nvm/bash_completion" + +# Install NodeJS v17.0.1 +nvm install 17.0.1 + +# Retrieve the hashes file +wget -O hashes.txt "$(jq -r '.hashFileUrl' manifest.json)" + +# Make the dirs +mkdir npk-rules + +# Get all manifest components +jq -r '.dictionaryFile' manifest.json | xargs -L1 -I'{}' aws --region $BUCKETREGION s3 cp s3://$BUCKET/{} ./npk-wordlist/ +jq -r '.rulesFiles[]' manifest.json | xargs -L1 -I'{}' aws --region $BUCKETREGION s3 cp s3://$BUCKET/{} ./npk-rules/ + +# Unzip them +# 7z x ./npk-wordlist/* -o./npk-wordlist/ +# 7z x ./npk-rules/* -o./npk-rules/ + +jq -r '.dictionaryFile' manifest.json | grep \.7z$ | xargs -L1 -I'{}' 7z x ./npk-{} -o./npk-wordlist/ +jq -r '.dictionaryFile' manifest.json | grep \.gz$ | xargs -L1 -I'{}' gunzip ./npk-{} + +jq -r '.rulesFiles[]' manifest.json | grep \.7z$ | xargs -L1 -I'{}' 7z x ./npk-{} -o./npk-rules/ +jq -r '.rulesFiles[]' manifest.json | grep \.gz$ | xargs -L1 -I'{}' gunzip ./npk-{} + +ls -alh ./npk-rules/ + +# Delete the originals +jq -r '.dictionaryFile' manifest.json | xargs -L1 -I'{}' rm ./npk-{} +jq -r '.rulesFiles[]' manifest.json | xargs -L1 -I'{}' rm -f ./npk-{} + +# Link the output file to potfiles +ln -s /var/log/cloud-init-output.log /potfiles/$${INSTANCEID}-output.log + +echo < /root/monitor_instance_action.sh +#! /bin/bash + +ACTIONS=\$(curl -s --head http://169.254.169.254/latest/meta-data/spot/intance_action | grep 404 | wc -l) +if [[ \$ACTIONS -ne 1 ]]; then + wget -O /potfiles/$${INSTANCEID}-instance_action.json http://169.254.169.254/latest/meta-data/spot/intance_action + aws --region $USERDATAREGION s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ --include \"*$${INSTANCEID}*\" +fi +EOF + +chmod +x /root/monitor_instance_action.sh + +cat /root/monitor_instance_action.sh + +# Create the crontab to sync s3 +echo "* * * * * root aws --region $USERDATAREGION s3 sync s3://$USERDATA/$ManifestPath/potfiles/ /potfiles/ --exclude \"*$${INSTANCEID}*\" --exclude \"*benchmark-results*\"" >> /etc/crontab +echo "* * * * * root aws --region $USERDATAREGION s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ --include \"*$${INSTANCEID}*\" --include \"*benchmark-results*\"" >> /etc/crontab +echo "* * * * * root /root/monitor_instance_action.sh" >> /etc/crontab + +aws ec2 describe-spot-fleet-instances --region $REGION --spot-fleet-request-id $SpotFleet | jq '.ActiveInstances[].InstanceId' | sort > fleet_instances +export INSTANCECOUNT=$(cat fleet_instances | wc -l) +export INSTANCENUMBER=$(cat fleet_instances | grep -nr $INSTANCEID - | cut -d':' -f1) + +if [[ $(uname -a | grep x86_64 | wc -l) -eq 1 ]]; then + aws s3 cp s3://$BUCKET/components-v3/hashcat.7z . + aws s3 cp s3://$BUCKET/components-v3/maskprocessor.7z . + + 7z x hashcat.7z + 7z x maskprocessor.7z + mv hashcat-*/ hashcat + mv maskprocessor-*/ maskprocessor +else + aws s3 cp s3://$BUCKET/components-v3/hashcat.arm64.7z . + 7z x hashcat.arm64.7z + mv /root/hashcat/hashcat /root/hashcat/hashcat.bin + mkdir /root/maskprocessor + ln -s $(which mp64) /root/maskprocessor/mp64.bin +fi + +7z x compute-node.7z + +# Put the envvars in a useful place, in case debugging is needed. +echo "export APIGATEWAY=$APIGATEWAY" >> envvars +echo "export USERDATA=$USERDATA" >> envvars +echo "export USERDATAREGION=$USERDATAREGION" >> envvars +echo "export INSTANCEID=$INSTANCEID" >> envvars +echo "export REGION=$REGION" >> envvars +echo "export BUCKET=$BUCKET" >> envvars +echo "export BUCKETREGION=$BUCKETREGION" >> envvars +echo "export ManifestPath=$ManifestPath" >> envvars +echo "export INSTANCECOUNT=$INSTANCECOUNT" >> envvars +echo "export INSTANCENUMBER=$INSTANCENUMBER" >> envvars +echo "export KEYSPACE=$KEYSPACE" >> envvars +chmod +x envvars + +# If we have a mask specified for a non-mask attack type, generate a rule file from the mask: +if [[ "$(jq -r '.attackType' manifest.json)" != "3" && "$(jq -r '.mask' manifest.json)" != "null" ]]; then + MASK=$(jq -r '.mask' manifest.json | sed 's/?/ $?/g') + MASK=$${MASK:1} + + echo "[*] Manifest has mask of [$MASK]" + + if [[ $(echo $MASK | wc -c) -gt 0 ]]; then + echo "/root/maskprocessor/mp64.bin -o /root/npk-rules/npk-maskprocessor.rule \"$MASK\"" + /root/maskprocessor/mp64.bin -o /root/npk-rules/npk-maskprocessor.rule "$MASK" + echo : >> /root/npk-rules/npk-maskprocessor.rule + echo "Mask rule created with $(cat /root/npk-rules/npk-maskprocessor.rule | wc -l) entries" + fi +fi + +# Use this for normal operations +node compute-node/hashcat_wrapper.js +echo "[*] Hashcat wrapper finished with status code $?" +# aws s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ +aws --region $USERDATAREGION s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ --include "*$${INSTANCEID}*" --include "*benchmark-results*" --include "all_cracked_hashes.txt" +sleep 30 + +if [[ ! -f /root/nodeath ]]; then + poweroff +fi +# =============================== + +# Use this to generate benchmarks +# /root/hashcat/hashcat.bin -O -w 4 -b --benchmark-all | tee /potfiles/benchmark-results.txt +# aws --region $USERDATAREGION s3 cp /potfiles/benchmark-results.txt s3://$USERDATA/$ManifestPath/potfiles/ + +# poweroff +# =============================== + +# Use this to generate wordlist benchmarks +# aws s3 cp s3://$BUCKET/components-v3/hashstash.7z . +# 7z x hashstash.7z +# ls hashstash | awk ' { system("./hashcat/hashcat.bin -O -w 4 --keep-guessing --runtime 20 -m " $1 " -a 0 -r npk-rules/npk-maskprocessor.rule -r npk-rules/OneRuleToRuleThemAll.rule ./hashstash/" $1 " ./npk-wordlist/rockyou.txt | grep -e Speed.# -e Hash.Mode | tee -a /potfiles/wordlist-benchmark-results.txt") } ' +# aws --region $USERDATAREGION s3 cp /potfiles/wordlist-benchmark-results.txt s3://$USERDATA/$ManifestPath/potfiles/ + +# poweroff +# =============================== \ No newline at end of file diff --git a/terraform-selfhost/community_configs/dictionaries.tfvars b/terraform-selfhost/community_configs/dictionaries.tfvars deleted file mode 100644 index 0d5f768..0000000 --- a/terraform-selfhost/community_configs/dictionaries.tfvars +++ /dev/null @@ -1,17 +0,0 @@ -/* - DO NOT EDIT THIS FILE MANUALLY - - Unless you *actually* know - - - what you're doing. - -*/ - -/* Dictionaries Variables */ - -dictionary-us-east-1 = "arn:aws:s3:::npk-dictionary-east-1-20181029005812833000000004" -dictionary-us-east-2 = "arn:aws:s3:::npk-dictionary-east-2-20181029005812776500000003" -dictionary-us-west-1 = "arn:aws:s3:::npk-dictionary-west-1-20181029005812746900000001" -dictionary-us-west-2 = "arn:aws:s3:::npk-dictionary-west-2-20181029005812750900000002" - -dictionary-us-east-1-id = "npk-dictionary-east-1-20181029005812833000000004" -dictionary-us-east-2-id = "npk-dictionary-east-2-20181029005812776500000003" -dictionary-us-west-1-id = "npk-dictionary-west-1-20181029005812746900000001" -dictionary-us-west-2-id = "npk-dictionary-west-2-20181029005812750900000002" \ No newline at end of file diff --git a/terraform-selfhost/community_configs/dictionary-buckets.js b/terraform-selfhost/community_configs/dictionary-buckets.js deleted file mode 100644 index dab726d..0000000 --- a/terraform-selfhost/community_configs/dictionary-buckets.js +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('app').constant('DICTIONARY_BUCKETS', { - "us-east-1": "npk-dictionary-east-1-20181029005812833000000004", - "us-east-2": "npk-dictionary-east-2-20181029005812776500000003", - "us-west-1": "npk-dictionary-west-1-20181029005812746900000001", - "us-west-2": "npk-dictionary-west-2-20181029005812750900000002" -}); \ No newline at end of file diff --git a/terraform-selfhost/compute-node/package-lock.json b/terraform-selfhost/compute-node/package-lock.json deleted file mode 100644 index 2f1baeb..0000000 --- a/terraform-selfhost/compute-node/package-lock.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "name": "compute-node", - "version": "2.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "aws-api-gateway-client": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/aws-api-gateway-client/-/aws-api-gateway-client-0.2.17.tgz", - "integrity": "sha512-7qIYsOWT/S8tPWyQuXkfWuMa/dhCY+FMsWBhl6waCyhosDYwUJlLEhtSHQ2/HhyU5qqUAQlEL17vpH7pIAj49w==", - "requires": { - "axios": "^0.21.1", - "axios-retry": "^3.0.1", - "crypto-js": "^3.1.9-1", - "url": "^0.11.0", - "url-template": "^2.0.8" - } - }, - "aws-sdk": { - "version": "2.806.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.806.0.tgz", - "integrity": "sha512-kCrGfZyzZiS56qblXEzznkTi64ZbzhQGlbyEjDI9cIUjX4dA9IyqvNWUdJvUQoZmiEnObbuXMVrv7blJzT8uhQ==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - } - } - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - } - } - }, - "axios-retry": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz", - "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==", - "requires": { - "is-retry-allowed": "^1.1.0" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } -} diff --git a/terraform-selfhost/deploy-selfhost.sh b/terraform-selfhost/deploy-selfhost.sh deleted file mode 100755 index ede97ae..0000000 --- a/terraform-selfhost/deploy-selfhost.sh +++ /dev/null @@ -1,165 +0,0 @@ -#! /bin/bash - -if [[ $1 == "" ]]; then - TERBIN=terraform -else - TERBIN=$1 -fi - -ERR=0; -if [[ ! -f $(which jsonnet) ]]; then - ERR=1; - echo "Error: Must have 'jsonnet' command installed."; -fi - -if [[ ! -f $(which jq) ]]; then - ERR=1; - echo "Error: Must have 'jq' command installed."; -fi - -if [[ ! -f $(which aws) ]]; then - ERR=1; - echo "Error: Must have AWSCLI installed."; -fi - -if [[ $(aws --version | grep "aws-cli/2" | wc -l) -lt 1 ]]; then - ERR=1; - echo "Error: NPK Selfhost requires AWSCLI version 2."; -fi - -if [[ ! -f $(which npm) ]]; then - ERR=1; - echo "Error: Must have NPM installed."; -fi - -if [[ ! -f $(which terraform) ]]; then - ERR=1; - echo "Error: Must have Terraform installed."; -fi - -if [[ "$(terraform -v | grep v0.11 | wc -l)" != "1" ]]; then - ERR=1; - echo "Error: Wrong version of Terraform is installed. NPK requires Terraform v0.11."; - echo "-> Note: A non-default binary can be specified as a positional script parameter:" - echo "-> e.g: ./deploy-selfhost.sh " - echo "" -fi - -if [[ -f $(which snap) ]]; then - if [[ $(snap list | grep $TERBIN | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: Terraform cannot be installed via snap. Download the v0.11 binary manually and place it in your path." - fi - - if [[ $(snap list | grep jsonnet | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: jsonnet cannot be installed via snap. Download the binary manually and place it in your path." - fi - - if [[ $(snap list | grep jq | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: jq cannot be installed via snap. Install via apt or download in manually and place it in your path." - fi -fi - -if [[ "$ERR" == "1" ]]; then - echo -e "\nInstall missing components, then try again.\n" - exit 1 -fi - -PROFILE=$(jq -r '.awsProfile' ../terraform/npk-settings.json) - -export AWS_DEFAULT_REGION=us-west-2 -export AWS_DEFAULT_OUTPUT=json -export AWS_PROFILE=$PROFILE - -# Disable Pager for AWS CLI v2 -if [[ $(aws --version | grep "aws-cli/2" | wc -l) -ge 1 ]]; then - export AWS_PAGER=""; -fi - -BUCKET=$(jq -r '.backend_bucket' ../terraform/npk-settings.json) - -if [[ "$BUCKET" == "" ]]; then - echo "No backend bucket is specified in npk-settings.json. This is best practice and required for NPKv2." - echo "If you specify a bucket that doesn't exist, NPK will create it for you. How easy is that?" - echo "Update npk-settings.json and try again." - echo "" - exit 1 -fi - -EXISTS=$(aws s3api get-bucket-location --bucket $BUCKET) -if [[ $? -ne 0 ]]; then - aws s3api create-bucket --bucket $BUCKET --create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION - - if [[ $? -ne 0 ]]; then - echo "Error creating backend_bucket. Fix that^ error then try again." - exit 1 - fi -else - if [[ "$( echo $EXISTS | jq -r '.LocationConstraint' )" != "$AWS_DEFAULT_REGION" ]]; then - echo "The backend_bucket you specified doesn't reside in the defaultRegion. Specify a bucket in us-west-2, then try again." - echo "$( echo $EXISTS | jq '.LocationConstraint' ) vs. $AWS_DEFAULT_REGION" - exit 1 - fi -fi - -# Get the availability zones for each region -if [ ! -f ../terraform/regions.json ]; then - echo "[*] Getting availability zones from AWS" - while IFS= read -r region; do - echo "[*] - ${region}" - aws ec2 --region ${region} describe-availability-zones | jq -r '{"'${region}'": [.AvailabilityZones[] | select(.State=="available") | .ZoneName]}' > region-${region}.json - done <<< $(echo '["us-east-1", "us-east-2", "us-west-1", "us-west-2"]' | jq -r '.[]') - - jq -rs 'reduce .[] as $item ({}; . * $item)' ./region-*.json > ../terraform/regions.json - rm region-*.json - - if [[ "$(cat ../terraform/regions.json | wc -l)" -lt "4" ]]; then - echo -e "\n[!] Error retrieving AWS availability zones. Check the 'awsProfile' setting and try again" - rm ../terraform/regions.json - exit 1 - fi -else - echo "[*] Using known availability zones. Delete regions.json to force re-evaluation." -fi - -# remove old configs silently: -rm -f *.tf.json - -echo "[*] Generating Terraform configurations" -jsonnet -m . terraform-selfhost.jsonnet - -if [[ "$?" -eq "1" ]]; then - echo "" - echo "[!] An error occurred generating the config files. Address the error and try again." - echo "" - exit 1 -fi - -aws s3api head-object --bucket $BUCKET --key c6fc.io/npk/terraform-selfhost.tfstate >> /dev/null -ISINIT="$?" - -if [[ ! -d .terraform || $ISINIT -ne 0 ]]; then - $TERBIN init -force-copy - - if [[ $? -ne 0 ]]; then - echo "[-] An error occurred while running 'terraform init'. Address the error and try again" - exit 1 - fi -fi - -$TERBIN apply -auto-approve - -if [[ "$?" -eq "1" ]]; then - echo "" - echo "[!] An error occurred while running terraform for selhost. Address the error and try again." - echo "" - exit 1 -fi - -echo "[*] Marking custom components as assume-unchanged in git." -git update-index --assume-unchanged ../terraform/dictionaries.auto.tfvars ../site-content/assets/js/dictionary-buckets.js - -cd ../terraform/ -./deploy.sh \ No newline at end of file diff --git a/terraform-selfhost/packer/p3_ami.json b/terraform-selfhost/packer/p3_ami.json deleted file mode 100644 index 8e1b19e..0000000 --- a/terraform-selfhost/packer/p3_ami.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "sensitive-variables": ["aws_access_key_id", "aws_secret_access_key"], - "builders": [ - { - "access_key": "{{user `aws_access_key_id`}}", - "secret_key": "{{user `aws_secret_access_key`}}", - "ami_name": "packer-npk-p3-{{timestamp}}", - "instance_type": "c3.large", - "region": "{{ user `region` }}", - "spot_price": "auto", - "spot_price_auto_product": "Linux/UNIX", - "source_ami_filter": { - "filters": { - "virtualization-type": "hvm", - "name": "aaws-marketplace/amzn-ami-graphics-hvm-2018.03.0.20181116-x86_64-ebs-d3fbf14b-243d-46e0-916c-82a8bf6955b4-ami-0bd78ae4f5bbeceef.4", - "root-device-type": "ebs" - }, - "owners": ["679593333241"], - "most_recent": true - }, - "ssh_username": "ubuntu", - "type": "amazon-ebs" - } - ], - "provisioners": [ - { - "type": "file", - "source": "./components/driver_p3.run", - "destination": "/home/ubuntu/driver.run" - }, - { - "type": "file", - "source": "./components/blacklist-nouveau.conf", - "destination": "/etc/modprobe.d/blacklist-nouveau.conf" - }, - { - "type": "file", - "source": "./components/hashcat.7z", - "destination": "/home/ubuntu/hashcat.7z" - }, - { - "type": "shell", - "inline":[ - "sudo apt-get update && sudo apt-get install -y build-essential linux-headers-$(uname -r) p7zip-full linux-image-extra-virtual", - "cat /home/ubuntu/welcome.txt" - ] - }, - { - "type": "shell", - "script": "./example.sh" - } - ] -} \ No newline at end of file diff --git a/terraform-selfhost/switch_to_community_buckets.sh b/terraform-selfhost/switch_to_community_buckets.sh deleted file mode 100755 index 6d341f3..0000000 --- a/terraform-selfhost/switch_to_community_buckets.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /bin/bash - -echo "" -echo "This will configure your NPK installation to use the community dictionary buckets. A few things to note:" -echo "-> 1. This script will automatically trigger a deployment with terraform. Do no proceed if you don't want this to happen." -echo "-> 2. This will NOT delete any self-hosted buckets you may have (use 'terraform destroy' in the 'terraform-selfhost' folder for that)." -echo "-> 3. To switch back to self-hosted buckets, run './deploy-selfhost.sh' from the 'terraform-selfhost' folder." -echo "" -read -r -p " Do you understand and wish to proceed? [Yes]: " key - -if [[ "$key" != "Yes" ]]; then - echo "You must accept the warning with 'Yes' in order to continue." - echo "" - - exit 1 -fi - -echo "" -echo "[+] Copying community configurations to NPK installation" -cp community_configs/dictionaries.tfvars ../terraform/dictionaries.auto.tfvars -cp community_configs/dictionary-buckets.js ../site-content/assets/js/ - -echo "[+] Deploying changes..." -cd ../terraform/ -./deploy.sh \ No newline at end of file diff --git a/terraform-selfhost/templates/dictionaries.auto.tfvars.tpl b/terraform-selfhost/templates/dictionaries.auto.tfvars.tpl deleted file mode 100644 index f2f8ddd..0000000 --- a/terraform-selfhost/templates/dictionaries.auto.tfvars.tpl +++ /dev/null @@ -1,17 +0,0 @@ -/* - DO NOT EDIT THIS FILE MANUALLY - - Unless you *actually* know - - - what you're doing. - -*/ - -/* Dictionaries Variables */ - -dictionary-us-east-1 = "${de1}" -dictionary-us-east-2 = "${de2}" -dictionary-us-west-1 = "${dw1}" -dictionary-us-west-2 = "${dw2}" - -dictionary-us-east-1-id = "${de1i}" -dictionary-us-east-2-id = "${de2i}" -dictionary-us-west-1-id = "${dw1i}" -dictionary-us-west-2-id = "${dw2i}" \ No newline at end of file diff --git a/terraform-selfhost/templates/dictionary-buckets.js.tpl b/terraform-selfhost/templates/dictionary-buckets.js.tpl deleted file mode 100644 index 60871d5..0000000 --- a/terraform-selfhost/templates/dictionary-buckets.js.tpl +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('app').constant('DICTIONARY_BUCKETS', { - "us-east-1": "${de1}", - "us-east-2": "${de2}", - "us-west-1": "${dw1}", - "us-west-2": "${dw2}" -}); \ No newline at end of file diff --git a/terraform-selfhost/templates/upload_npkfile.sh.tpl b/terraform-selfhost/templates/upload_npkfile.sh.tpl deleted file mode 100755 index e18edcb..0000000 --- a/terraform-selfhost/templates/upload_npkfile.sh.tpl +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/bash - -ERR=0; -if [[ ! -f $(which 7z) ]]; then - ERR=1; - echo "Error: Must have '7z' command installed."; -fi - -if [[ ! -f $(which aws) ]]; then - ERR=1; - echo "Error: Must have AWSCLI installed."; -fi - -if [[ "$1" != "wordlist" && "$1" != "rules" ]]; then - echo "Error: must be 'wordlist' or 'rules'" - ERR=1 -fi - -if [[ $# -lt 2 ]]; then - ERR=1 -fi - -if [[ "$ERR" == "1" ]]; then - echo -e "\nSyntax: $0 [...]\n" - exit 1 -fi - -export AWS_DEFAULT_REGION=us-west-2 -export AWS_DEFAULT_OUTPUT=json -export AWS_PROFILE=$(jq -r '.awsProfile' ../terraform/npk-settings.json) - -BUCKET1=${de1} -REGION1="us-east-1" - -BUCKET2=${de2} -REGION2="us-east-2" - -BUCKET3=${dw1} -REGION3="us-west-1" - -BUCKET4=${dw2} -REGION4="us-west-2" - -FILENAME=$(echo $${2##*/}) -echo "Processing $1 $FILENAME" -ARCHIVE=$(echo $${FILENAME%.*}).7z -echo "- Counting lines" -FILELINES=$(wc -l $2 | cut -d" " -f1) -SIZE=$(ls -al $2 | cut -d" " -f5) -echo "- Compressing" -7z a $ARCHIVE $2 - -echo "- Uploading to S3" -aws s3 cp $ARCHIVE s3://$BUCKET1/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION1 -aws s3 cp s3://$BUCKET1/$1/$ARCHIVE s3://$BUCKET2/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION2 -aws s3 cp s3://$BUCKET1/$1/$ARCHIVE s3://$BUCKET3/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION3 -aws s3 cp s3://$BUCKET1/$1/$ARCHIVE s3://$BUCKET4/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION4 - -# aws s3 cp $ARCHIVE s3://$BUCKET2/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION2 -# aws s3 cp $ARCHIVE s3://$BUCKET3/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION3 -# aws s3 cp $ARCHIVE s3://$BUCKET4/$1/ $${@:3} --metadata type=$1,lines=$FILELINES,size=$SIZE --region $REGION4 -rm $ARCHIVE - -echo -e "Done.\n\n" \ No newline at end of file diff --git a/terraform-selfhost/terraform-selfhost.jsonnet b/terraform-selfhost/terraform-selfhost.jsonnet deleted file mode 100644 index 74c3535..0000000 --- a/terraform-selfhost/terraform-selfhost.jsonnet +++ /dev/null @@ -1,208 +0,0 @@ -local npksettings = import '../terraform/npk-settings.json'; -local regions = import '../terraform/regions.json'; - -local settings = npksettings + { - defaultRegion: "us-west-2", - regions: regions -}; - -local defaultResource = { - "tags": { - "Project": "NPK" - } -}; - -local regionKeys = std.objectFields(settings.regions); - -{ - 'backend.tf.json': { - terraform: { - backend: { - s3: { - bucket: settings.backend_bucket, - key: "c6fc.io/npk/terraform-selfhost.tfstate", - profile: settings.awsProfile, - region: settings.defaultRegion - } - } - } - }, - 'provider.tf.json': { - provider: [{ - aws: { - alias: region, - profile: settings.awsProfile, - region: region - } - } for region in regionKeys ] - }, - 's3.tf.json': { - resource: { - aws_s3_bucket: { - [region]: { - provider: "aws." + region, - bucket_prefix: "npk-dictionary-" + region + "-", - acl: "private", - force_destroy: true, - - cors_rule: { - allowed_headers: ["*"], - allowed_methods: ["GET", "HEAD"], - allowed_origins: ["*"], - expose_headers : ["x-amz-meta-lines", "x-amz-meta-size", "x-amz-meta-type", "content-length"], - max_age_seconds: 3000 - }, - - tags: { - Project: "NPK" - } - } for region in regionKeys - } - } - }, - 'sync_npkcomponents.tf.json': { - resource: { - null_resource: { - sync_npkcomponents: { - triggers: { - content: "${local_file.sync_npkcomponents.content}" - }, - - provisioner: { - "local-exec": { - command: "${local_file.sync_npkcomponents.filename}", - - environment: { - AWS_PROFILE: settings.awsProfile - } - } - }, - - depends_on: ["local_file.sync_npkcomponents"] + [ - "aws_s3_bucket." + region - for region in regionKeys - ] - } - } - } - }, - 'templates.tf.json': { - data: { - template_file: { - dictionaries_variables: { - template: "${file(\"${path.module}/templates/dictionaries.auto.tfvars.tpl\")}", - - vars: { - de1: "${aws_s3_bucket.us-east-1.arn}", - de2: "${aws_s3_bucket.us-east-2.arn}", - dw1: "${aws_s3_bucket.us-west-1.arn}", - dw2: "${aws_s3_bucket.us-west-2.arn}", - - de1i: "${aws_s3_bucket.us-east-1.id}", - de2i: "${aws_s3_bucket.us-east-2.id}", - dw1i: "${aws_s3_bucket.us-west-1.id}", - dw2i: "${aws_s3_bucket.us-west-2.id}" - } - }, - dictionary_buckets: { - template: "${file(\"${path.module}/templates/dictionary-buckets.js.tpl\")}", - - vars: { - de1: "${aws_s3_bucket.us-east-1.id}", - de2: "${aws_s3_bucket.us-east-2.id}", - dw1: "${aws_s3_bucket.us-west-1.id}", - dw2: "${aws_s3_bucket.us-west-2.id}" - } - }, - upload_npkfile: { - template: "${file(\"${path.module}/templates/upload_npkfile.sh.tpl\")}", - - vars: { - de1: "${aws_s3_bucket.us-east-1.id}", - de2: "${aws_s3_bucket.us-east-2.id}", - dw1: "${aws_s3_bucket.us-west-1.id}", - dw2: "${aws_s3_bucket.us-west-2.id}" - } - }, - upload_npkcomponents: { - template: "${file(\"${path.module}/templates/upload_npkcomponents.sh.tpl\")}", - - vars: { - de1: "${aws_s3_bucket.us-east-1.id}", - de2: "${aws_s3_bucket.us-east-2.id}", - dw1: "${aws_s3_bucket.us-west-1.id}", - dw2: "${aws_s3_bucket.us-west-2.id}", - basepath: "${path.module}" - } - }, - sync_npkcomponents: { - template: "${file(\"${path.module}/templates/sync_npkcomponents.sh.tpl\")}", - - vars: { - de1: "${aws_s3_bucket.us-east-1.id}", - de2: "${aws_s3_bucket.us-east-2.id}", - dw1: "${aws_s3_bucket.us-west-1.id}", - dw2: "${aws_s3_bucket.us-west-2.id}", - basepath: "${path.module}" - } - } - - } - }, - resource: { - local_file: { - dictionaries_variables: { - content: "${data.template_file.dictionaries_variables.rendered}", - filename: "${path.module}/../terraform/dictionaries.auto.tfvars" - }, - dictionary_buckets: { - content: "${data.template_file.dictionary_buckets.rendered}", - filename: "${path.module}/../site-content/assets/js/dictionary-buckets.js" - }, - upload_npkfile: { - content: "${data.template_file.upload_npkfile.rendered}", - filename: "${path.module}/upload_npkfile.sh" - }, - upload_npkcomponents: { - content: "${data.template_file.upload_npkcomponents.rendered}", - filename: "${path.module}/upload_npkcomponents.sh" - }, - sync_npkcomponents: { - content: "${data.template_file.sync_npkcomponents.rendered}", - filename: "${path.module}/sync_npkcomponents.sh" - } - - } - }, - output: { - dictionaries_variables: { - value: "${local_file.dictionaries_variables.filename}" - }, - dictionary_buckets: { - value: "${local_file.dictionary_buckets.filename}" - }, - upload_npkcomponents: { - value: "${local_file.upload_npkcomponents.filename}" - } - } - }, - 'upload_npkcomponents.tf.json': { - - resource: { - null_resource: { - npk_npm_install: { - triggers: { - content: "${local_file.upload_npkcomponents.content}" - }, - - provisioner: [{ - "local-exec": { - command: "cd ${path.module}/compute-node/ && npm install" - } - }] - } - } - } - } - -} \ No newline at end of file diff --git a/terraform.jsonnet b/terraform.jsonnet new file mode 100644 index 0000000..a9fcf62 --- /dev/null +++ b/terraform.jsonnet @@ -0,0 +1,1216 @@ +local aws = import 'aws-sdk'; +local sonnetry = import 'sonnetry'; +local modules = import 'modules'; + +local provider = import 'jsonnet/provider.libsonnet'; + +local iam = import 'jsonnet/iam.libsonnet'; +local igw = import 'jsonnet/igw.libsonnet'; +local acm = import 'jsonnet/acm.libsonnet'; +local api_gateway_map = import 'jsonnet/api_gateway_map.libsonnet'; +local cloudfront = import 'jsonnet/cloudfront.libsonnet'; +local cloudwatch = import 'jsonnet/cloudwatch.libsonnet'; +local cognito = import 'jsonnet/cognito.libsonnet'; +local cognito_iam_roles = import 'jsonnet/cognito_iam_roles.libsonnet'; +local dynamodb = import 'jsonnet/dynamodb.libsonnet'; +local dynamodb_settings = import 'jsonnet/dynamodb_settings.libsonnet'; +local ec2_iam_roles = import 'jsonnet/ec2_iam_roles.libsonnet'; +local gpu_instance_families = import 'jsonnet/gpu_instance_families.json'; +local keepers = import 'jsonnet/keepers.libsonnet'; +local lambda = import 'jsonnet/lambda.libsonnet'; +// local lambda_functions = import 'jsonnet/lambda_functions.libsonnet'; +// local lambda_iam_roles = import 'jsonnet/lambda_iam_roles.libsonnet'; +local null_resources = import 'jsonnet/null_resources.libsonnet'; +local route = import 'jsonnet/routetable.libsonnet'; +local route53 = import 'jsonnet/route53.libsonnet'; +local s3 = import 'jsonnet/s3.libsonnet'; +local subnet = import 'jsonnet/subnet.libsonnet'; +// local templates = import 'jsonnet/templates.libsonnet'; +local variables = import 'jsonnet/variables.libsonnet'; +local vpc = import 'jsonnet/vpc.libsonnet'; + +local validatedSettings = std.extVar('validatedSettings'); + +local npksettings = import 'npk-settings.json'; +// local regions = import 'regions.json'; +// local quotas = import 'quotas.json'; +// local hostedZone = import 'hostedZone.json'; +// local providerRegions = import 'providerRegions.json'; + +local settings = { + georestrictions: [], + campaign_data_ttl: 604800, + campaign_max_price: 50, + awsProfile: "default", + wwwEndpoint: "${aws_cloudfront_distribution.npk.domain_name}", + primaryRegion: "us-west-2", +} + npksettings + { + familyRegions: validatedSettings.familyRegions, + families: gpu_instance_families, + regions: validatedSettings.regions, + quotas: validatedSettings.quotas, + useCustomDNS: std.objectHas(validatedSettings, 'dnsBaseName'), + useSAML: std.objectHas(npksettings, 'sAMLMetadataFile') || std.objectHas(npksettings, 'sAMLMetadataUrl') +} + if !std.objectHas(validatedSettings, 'dnsBaseName') then {} else { + dnsBaseName: validatedSettings.dnsBaseName, + wwwEndpoint: "%s" % [validatedSettings.dnsBaseName], + apiEndpoint: "api.%s" % [validatedSettings.dnsBaseName], + authEndpoint: "auth.%s" % [validatedSettings.dnsBaseName] +}; + +local accountDetails = { + primaryRegion: settings.primaryRegion, + families: gpu_instance_families, + regions: validatedSettings.regions, + quotas: validatedSettings.quotas +}; + +local apiName = "npkv3-%s" % std.md5(modules.random())[0:5]; + +local regionKeys = std.objectFields(settings.regions); + +{ + [if settings.useCustomDNS then 'acm.tf.json' else null]: { + resource: acm.certificate("main", "*.%s" % [settings.dnsBaseName], [settings.dnsBaseName], settings.route53Zone) + }, + 'api_gateway.tf.json': api_gateway_map.rest_api(apiName, { + parameters: { + endpoint_configuration: { + types: ["EDGE"] + } + }, + deployment: { + stage_name: "v1" + }, + root: { + children: [{ + pathPart: "userproxy", + methods: { + OPTIONS: { + optionsIntegration: true, + parameters: { + authorization: "NONE", + request_parameters: { + "method.request.path.proxy": true + } + } + } + }, + children: [{ + pathPart: "campaign", + methods: { + POST: { + lambdaIntegration: "create_campaign", + parameters: { + authorization: "AWS_IAM" + } + }, + OPTIONS: { + optionsIntegration: true, + parameters: { + authorization: "NONE", + request_parameters: { + "method.request.path.proxy": true + } + } + } + }, + children: [{ + pathPart: "{campaign}", + methods: { + DELETE: { + lambdaIntegration: "delete_campaign", + parameters: { + authorization: "AWS_IAM", + request_parameters: { + "method.request.path.campaign": true + } + } + }, + PUT: { + lambdaIntegration: "execute_campaign", + parameters: { + authorization: "AWS_IAM" + } + }, + OPTIONS: { + optionsIntegration: true, + parameters: { + authorization: "NONE", + request_parameters: { + "method.request.path.proxy": true + } + } + } + }, + }] + }] + }, { + pathPart: "statusreport", + methods: { + OPTIONS: { + optionsIntegration: true, + parameters: { + authorization: "NONE", + request_parameters: { + "method.request.path.proxy": true + } + } + } + }, + children: [{ + pathPart: "{proxy+}", + methods: { + POST: { + lambdaIntegration: "status_reporter", + parameters: { + authorization: "AWS_IAM" + } + }, + OPTIONS: { + optionsIntegration: true, + parameters: { + authorization: "NONE", + request_parameters: { + "method.request.path.proxy": true + } + } + } + } + }] + }] + } + }), + 'api_gateway_addons.tf.json': { + resource: { + aws_api_gateway_account: { + npk: { + cloudwatch_role_arn: "${aws_iam_role.npk-apigateway_cloudwatch.arn}" + } + }, + aws_api_gateway_authorizer: { + npk: { + name: "npk", + type: "COGNITO_USER_POOLS", + rest_api_id: "${aws_api_gateway_rest_api.%s.id}" % apiName, + provider_arns: [ + "${aws_cognito_user_pool.npk.arn}" + ] + } + }, + } + }, + [if settings.useCustomDNS then 'api_gateway_addons-useCustomDNS.tf.json' else null]: { + resource: { + aws_api_gateway_base_path_mapping: { + [apiName]: { + api_id: "${aws_api_gateway_rest_api.%s.id}" % apiName, + stage_name: "${aws_api_gateway_deployment.%s.stage_name}" % apiName, + domain_name: "${aws_api_gateway_domain_name.npk.domain_name}", + base_path: "v1" + } + }, + aws_api_gateway_domain_name: { + npk: { + certificate_arn: "${aws_acm_certificate.main.arn}", + domain_name: settings.apiEndpoint, + depends_on: ["aws_acm_certificate_validation.main"] + } + } + } + }, + 'backend.tf.json': sonnetry.bootstrap('c6fc_npk'), + 'cloudfront.tf.json': { + resource: cloudfront.resource(settings), + output: cloudfront.output + }, + 'cloudwatch.tf.json': cloudwatch, + 'cloudwatch-policy.tf.json': { + data: { + aws_iam_policy_document: { + cloudwatch_invoke_spot_monitor: { + statement: { + actions: ["lambda:Invoke"], + resources: ["${aws_lambda_function.spot_monitor.arn}"] + } + }, + cloudwatch_invoke_spot_interrupt_catcher: { + statement: { + actions: ["lambda:Invoke"], + resources: ["${aws_lambda_function.spot_interrupt_catcher.arn}"] + } + } + } + } + }, + 'cloudwatch-interrupt_rules.tf.json': { + resource: { + aws_cloudwatch_event_rule: { + ['spot_interrupt_catcher-%s' % region]: { + provider: "aws." + region, + name: "npkSpotInterruptCatcher", + description: "Catches spot instance interrupt notifications", + event_pattern: std.manifestJsonEx({ + "detail-type": ["EC2 Spot Instance Interruption Warning"], + source: ["aws.ec2"] + }, ""), + role_arn: "${aws_iam_role.cloudwatch_invoke_spot_monitor.arn}" + } for region in regionKeys + }, + aws_cloudwatch_event_target:{ + ['spot_interrupt_catcher-%s' % region]: { + provider: "aws." + region, + rule: "${aws_cloudwatch_event_rule.spot_interrupt_catcher-%s.name}" % region, + arn: "${aws_lambda_function.spot_interrupt_catcher.arn}" + } for region in regionKeys + }, + aws_lambda_permission: { + ['spot_interrupt_catcher-%s' % region]: { + statement_id: "spot_interrupt_catcher-%s" % region, + action: "lambda:InvokeFunction", + function_name: "${aws_lambda_function.spot_interrupt_catcher.function_name}", + principal: "events.amazonaws.com", + source_arn: "${aws_cloudwatch_event_rule.spot_interrupt_catcher-%s.arn}" % region, + } for region in regionKeys + } + } + }, + 'cloudwatch-api-gateway-role.tf.json': { + resource: iam.iam_role( + "npk-apigateway_cloudwatch", + "Allow APIGateway to write to CloudWatch Logs", + {}, + { + CloudWatchPut: [{ + Sid: "logs", + Effect: "Allow", + Action: [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:DescribeLogGroups", + "logs:DescribeLogStreams", + "logs:PutLogEvents", + "logs:GetLogEvents", + "logs:FilterLogEvents" + ], + Resource: "arn:aws:logs:*" + }] + }, + [{ + Effect: "Allow", + Principal: { + Service: "apigateway.amazonaws.com" + }, + Action: "sts:AssumeRole" + }] + ) + }, + 'cognito_iam_roles.tf.json': { + resource: cognito_iam_roles.resource, + data: cognito_iam_roles.data(settings, apiName) + }, + 'cognito.tf.json': { + resource: cognito.resource(settings), + output: cognito.output(settings) + }, + 'data.tf.json': { + data: { + aws_caller_identity: { + current: {} + } + } + }, + 'dynamodb.tf.json': { + resource: { + aws_dynamodb_table: { + [i]: dynamodb[i] for i in std.objectFields(dynamodb) + } + } + }, + 'dynamodb_settings.tf.json': { + resource: dynamodb_settings + }, + 'ec2_iam_roles.tf.json': ec2_iam_roles.roles(apiName), + 'ec2_iam_roles-compress.tf.json': { + resource: iam.iam_role( + "npk_ec2_compress", + "NPK Compression Nodes", + {}, + { + EC2Compression: [{ + Sid: "s3ToProcess", + Effect: "Allow", + Action: [ + "s3:GetObject", + "s3:DeleteObject" + ], + Resource: "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/to_process/*" + }, { + Sid: "s3PutFiles", + Effect: "Allow", + Action: "s3:PutObject", + Resource: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/wordlist/*", + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/rules/*" + ] + }] + }, + [{ + Effect: "Allow", + Principal: { + Service: "ec2.amazonaws.com" + }, + Action: "sts:AssumeRole" + }] + ) + { + aws_iam_instance_profile: { + npk_ec2_compress: { + name_prefix: "npk_ec2_compress_", + role: "${aws_iam_role.npk_ec2_compress.name}" + } + } + } + }, + 'keepers.tf.json': { + resource: keepers.resource(settings.adminEmail), + output: keepers.output + }, + 'keys.tf.json': { + resource: { + tls_private_key: { + ssh: { + algorithm: "RSA", + rsa_bits: 4096 + } + }, + aws_key_pair: { + [region]: { + provider: "aws." + region, + key_name: "npk-key", + public_key: "${tls_private_key.ssh.public_key_openssh}" + } for region in regionKeys + }, + local_sensitive_file: { + ssh_key: { + content: "${tls_private_key.ssh.private_key_pem}", + filename: "${path.module}/npk.pem", + file_permission: "0600" + } + } + } + }, + 'lambda-compression_pipe.tf.json': lambda.lambda_function("compression_pipe", { + handler: "main.main", + timeout: 900, + memory_size: 2048, + + environment: { + variables: { + compressionProfile: "${aws_iam_instance_profile.npk_ec2_compress.arn}", + iamFleetRole: "${aws_iam_role.npk_fleet_role.arn}", + subnets: std.manifestJsonEx([ + "${aws_subnet.npk-%s-subnet-%s.id}" % [settings.primaryRegion, az] + for az in settings.regions[settings.primaryRegion] + ], ""), + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + } + } + }, { + statement: [{ + sid: "s3ToProcess", + actions: [ + "s3:GetObject", + "s3:DeleteObject" + ], + resources: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/to_process/*" + ] + }, { + sid: "s3PutFiles", + actions: [ + "s3:PutObject", + "s3:GetObject", + "s3:DeleteObject" + ], + resources: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/wordlist/*", + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/rules/*", + ] + }, { + sid: "passrole", + actions: [ + "iam:PassRole" + ], + resources: [ + "${aws_iam_role.npk_ec2_compress.arn}", + "${aws_iam_role.npk_fleet_role.arn}" + ] + }, { + sid: "ec2", + actions: [ + "ec2:DescribeImages", + "ec2:DescribeSubnets", + "ec2:RequestSpotFleet", + "ec2:RunInstances", + "ec2:CreateTags" + ], + resources: ["*"] + }, { + sid: "sq", + actions: [ + "servicequotas:GetServiceQuota" + ], + resources: ["*"] + }] + }), + 'lambda-compression_pipe-permission.tf.json': { + resource: { + aws_lambda_permission: { + uploads: { + statement_id: "AllowBucketEvents", + action: "lambda:InvokeFunction", + function_name: "${aws_lambda_function.compression_pipe.id}", + principal: "s3.amazonaws.com", + source_arn: "${aws_s3_bucket.dictionary.arn}" + } + } + } + }, + 'lambda-create_campaign.tf.json': lambda.lambda_function("create_campaign", { + handler: "main.main", + timeout: 20, + memory_size: 512, + + environment: { + variables: { + + www_dns_names: settings.wwwEndpoint, + campaign_max_price: "${var.campaign_max_price}", + quotas: std.strReplace(std.manifestJsonEx(settings.quotas, ""), "\n", ""), + userdata_bucket: "${aws_s3_bucket.user_data.id}", + instanceProfile: "${aws_iam_instance_profile.npk_node.arn}", + iamFleetRole: "${aws_iam_role.npk_fleet_role.arn}", + regions: std.manifestJsonEx({ + [region]: "${aws_vpc.npk-%s.id}" % region + for region in regionKeys + }, ""), + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + dictionaryBucketRegion: settings.primaryRegion, + apigateway: if settings.useCustomDNS then + settings.apiEndpoint + else + "${aws_api_gateway_rest_api.%s.id}.execute-api.%s.amazonaws.com" % [apiName, settings.primaryRegion] + } + }, + }, { + statement: [{ + sid: "s3Put", + actions: [ + "s3:PutObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/*/campaigns/*/manifest.json", + "${aws_s3_bucket.logs.arn}/api_gateway_proxy/*", + ] + },{ + sid: "s3GetUserFile", + actions: [ + "s3:GetObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/*" + ] + },{ + sid: "s3GetDictionaryFile", + actions: [ + "s3:GetObject" + ], + resources: [ + "arn:aws:s3:::${aws_s3_bucket.dictionary.id}/*" + ] + },{ + sid: "ddb", + actions: [ + "dynamodb:Query", + "dynamodb:UpdateItem" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}" + ] + },{ + sid: "adminGetUser", + actions: [ + "cognito-idp:AdminGetUser", + "cognito-idp:ListUsers" + ], + resources: [ + "${aws_cognito_user_pool.npk.arn}" + ] + }] + }), + 'lambda-delete_campaign.tf.json': lambda.lambda_function("delete_campaign", { + handler: "main.main", + timeout: 20, + memory_size: 512, + + environment: { + variables: { + www_dns_names: std.toString([settings.wwwEndpoint]) + } + } + }, { + statement: [{ + sid: "ec2", + actions: [ + "ec2:CancelSpotFleetRequests", + "ec2:CreateTags", + "ec2:DescribeImages", + "ec2:DescribeSpotPriceHistory", + "ec2:DescribeSpotFleetRequests" + ], + resources: ["*"] + },{ + sid: "ddb", + actions: [ + "dynamodb:Query", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}" + ] + },{ + sid: "adminGetUser", + actions: [ + "cognito-idp:AdminGetUser", + "cognito-idp:ListUsers" + ], + resources: [ + "${aws_cognito_user_pool.npk.arn}" + ] + }] + }), + 'lambda-execute_campaign.tf.json': lambda.lambda_function("execute_campaign", { + handler: "main.main", + timeout: 60, + memory_size: 512, + + environment: { + variables: { + www_dns_names: std.toString(settings.wwwEndpoint), + campaign_max_price: "${var.campaign_max_price}", + quotas: std.strReplace(std.manifestJsonEx(settings.quotas, ""), "\n", ""), + userdata_bucket: "${aws_s3_bucket.user_data.id}", + instanceProfile: "${aws_iam_instance_profile.npk_node.arn}", + iamFleetRole: "${aws_iam_role.npk_fleet_role.arn}", + regions: std.manifestJsonEx({ + [region]: "${aws_vpc.npk-%s.id}" % region + for region in regionKeys + }, ""), + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + apigateway: if settings.useCustomDNS then + settings.apiEndpoint + else + "${aws_api_gateway_rest_api.%s.id}.execute-api.%s.amazonaws.com" % [apiName, settings.primaryRegion] + } + }, + + depends_on: ["local_file.userdata_template"] + }, { + statement: [{ + sid: "s3GetUserFile", + actions: [ + "s3:GetObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/*" + ] + },{ + sid: "ec2", + actions: [ + "ec2:DescribeImages", + "ec2:DescribeSubnets", + "ec2:DescribeSpotFleetRequests", + "ec2:DescribeSpotPriceHistory", + "ec2:RequestSpotFleet", + "ec2:RunInstances", + "ec2:CreateTags" + ], + resources: ["*"] + },{ + sid: "ddb", + actions: [ + "dynamodb:Query", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}" + ] + },{ + sid: "passrole", + actions: [ + "iam:PassRole" + ], + resources: [ + "${aws_iam_role.npk_instance_role.arn}", + "${aws_iam_role.npk_fleet_role.arn}" + ] + },{ + sid: "adminGetUser", + actions: [ + "cognito-idp:AdminGetUser", + "cognito-idp:ListUsers" + ], + resources: [ + "${aws_cognito_user_pool.npk.arn}" + ] + },{ + effect: "Allow", + actions: [ + "iam:CreateServiceLinkedRole" + ], + resources: [ + "arn:aws:iam::*:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet*" + ], + condition: { + test: "StringLike", + variable: "iam:AWSServiceName", + + values: ["spotfleet.amazonaws.com"] + } + },{ + effect: "Allow", + actions: [ + "iam:AttachRolePolicy", + "iam:PutRolePolicy" + ], + resources: [ + "arn:aws:iam::*:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet*" + ] + }] + }), + 'lambda-spot_interrupt_catcher.tf.json': lambda.lambda_function("spot_interrupt_catcher", { + handler: "main.main", + timeout: 10, + memory_size: 512, + + environment: { + variables: { + region: "${var.region}", + critical_events_sns_topic: "${aws_sns_topic.critical_events.id}", + } + }, + + dead_letter_config: { + target_arn: "${aws_sns_topic.critical_events.arn}" + } + }, { + statement: [{ + sid: "sns", + actions: [ + "sns:Publish" + ], + resources: [ + "${aws_sns_topic.critical_events.arn}" + ] + },{ + sid: "ec2", + actions: [ + "ec2:DescribeInstances", + ], + resources: ["*"] + },{ + sid: "ddb", + actions: [ + "dynamodb:UpdateItem" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}" + ] + }] + }), + 'lambda-spot_monitor.tf.json': lambda.lambda_function("spot_monitor", { + handler: "main.main", + timeout: 10, + memory_size: 512, + + environment: { + variables: { + www_dns_name: std.toString(settings.wwwEndpoint), + region: "${var.region}", + campaign_max_price: "${var.campaign_max_price}", + critical_events_sns_topic: "${aws_sns_topic.critical_events.id}", + regions: std.manifestJsonEx({ + [region]: "${aws_vpc.npk-%s.id}" % region + for region in regionKeys + }, ""), + } + }, + + dead_letter_config: { + target_arn: "${aws_sns_topic.critical_events.arn}" + } + }, { + statement: [{ + sid: "sns", + actions: [ + "sns:Publish" + ], + resources: [ + "${aws_sns_topic.critical_events.arn}" + ] + },{ + sid: "ec2", + actions: [ + "ec2:CancelSpotFleetRequests", + "ec2:DescribeTags", + "ec2:DescribeInstances", + "ec2:DescribeInstanceStatus", + "ec2:DescribeSpotFleetRequests", + "ec2:DescribeSpotFleetRequestHistory", + "ec2:DescribeSpotFleetInstances", + "ec2:DescribeSpotInstanceRequests", + "ec2:DescribeSpotPriceHistory" + ], + resources: ["*"] + },{ + sid: "ddb", + actions: [ + "dynamodb:GetItem", + "dynamodb:UpdateItem", + "dynamodb:Query" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}", + "${aws_dynamodb_table.campaigns.arn}/index/SpotFleetRequests" + ] + }] + }), + 'lambda-status_reporter.tf.json': lambda.lambda_function("status_reporter", { + handler: "main.main", + timeout: 10, + memory_size: 512, + + environment: { + variables: { + www_dns_name: std.toString(settings.wwwEndpoint), + region: "${var.region}", + campaign_max_price: "${var.campaign_max_price}", + critical_events_sns_topic: "${aws_sns_topic.critical_events.id}", + regions: std.manifestJsonEx({ + [region]: "${aws_vpc.npk-%s.id}" % region + for region in regionKeys + }, ""), + } + }, + + dead_letter_config: { + target_arn: "${aws_sqs_queue.status_reporter_dlq.arn}" + }, + }, { + statement: [{ + sid: "s3Put", + actions: [ + "s3:PutObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/*", + "${aws_s3_bucket.logs.arn}/api_gateway_proxy/*", + ] + },{ + sid: "s3GetDelete", + actions: [ + "s3:GetObject", + "s3:DeleteObject" + ], + resources: [ + "${aws_s3_bucket.user_data.arn}/*" + ] + },{ + sid: "ddb", + actions: [ + "dynamodb:Query", + "dynamodb:UpdateItem" + ], + resources: [ + "${aws_dynamodb_table.campaigns.arn}" + ] + },{ + sid: "sqs", + actions: [ + "sqs:SendMessage" + ], + resources: [ + "${aws_sqs_queue.status_reporter_dlq.arn}" + ] + }] + }), + 'null_resources.tf.json': null_resources.resource(settings), + 'provider.tf.json': { + terraform: { + required_providers: { + aws: { + source: "hashicorp/aws", + version: "~> 4.66.0" + }, + archive: { + source: "hashicorp/archive", + version: "~> 2.2.0" + } + } + }, + provider: [{ + aws: { + region: settings.primaryRegion + } + }, { + archive: {} + }] + [{ + aws: { + alias: region, + region: region + } + } for region in validatedSettings.providerRegions] + }, + [if settings.useCustomDNS then 'route53-main.tf.json' else null]: { + resource: { + aws_route53_record: { + www: route53.record( + settings.wwwEndpoint, + settings.route53Zone, + route53.alias( + "${aws_cloudfront_distribution.npk.domain_name}", + "${aws_cloudfront_distribution.npk.hosted_zone_id}" + ) + ) + } + { + api: route53.record( + settings.apiEndpoint, + settings.route53Zone, + route53.alias( + "${aws_api_gateway_domain_name.npk.cloudfront_domain_name}", + "${aws_api_gateway_domain_name.npk.cloudfront_zone_id}" + ) + ) + } + } + }, + [if settings.useCustomDNS then 'route53-auth.tf.json' else null]: { + resource: { + aws_route53_record: { + saml: route53.record( + settings.authEndpoint, + settings.route53Zone, + route53.alias( + "${aws_cognito_user_pool_domain.saml.cloudfront_distribution_arn}", + "Z2FDTNDATAQYW2" + ) + ) + } + } + }, + 's3.tf.json': { + resource: { + aws_s3_bucket: { + user_data: s3.bucket("npk-user-data-"), + static_site: s3.bucket("npk-site-content-"), + logs: s3.bucket("npk-logs-") + }, + aws_s3_bucket_acl: { + logs: { + bucket: "${aws_s3_bucket.logs.id}", + acl: "log-delivery-write", + + depends_on: ["aws_s3_bucket_ownership_controls.logs"] + } + }, + aws_s3_bucket_lifecycle_configuration: { + user_data: { + bucket: "${aws_s3_bucket.user_data.id}", + + rule: { + id: "1", + status: "Enabled", + expiration: { + days: 7 + }, + abort_incomplete_multipart_upload: { + days_after_initiation: 1 + } + } + } + }, + aws_s3_bucket_ownership_controls: { + logs: { + bucket: "${aws_s3_bucket.logs.id}", + + rule: [{ + object_ownership: "BucketOwnerPreferred" + }] + } + } + }, + output: { + s3_static_site_sync_command: { + value: "aws s3 --region %s sync ${path.module}/../site-content/ s3://${aws_s3_bucket.static_site.id}" % [settings.primaryRegion] + } + } + }, + 's3_dictionary.tf.json': { + resource: { + aws_s3_bucket: { + dictionary: { + bucket_prefix: "npk-dictionary-" + settings.primaryRegion + "-", + force_destroy: true, + + tags: { + Project: "NPK" + } + } + }, + aws_s3_bucket_cors_configuration: { + dictionary: { + bucket: "${aws_s3_bucket.dictionary.id}", + + cors_rule: { + allowed_headers: ["*"], + allowed_methods: ["GET", "PUT", "POST", "HEAD", "DELETE"], + allowed_origins: ["*"], + expose_headers : ["x-amz-meta-lines", "x-amz-meta-size", "x-amz-meta-type", "content-length", "ETag"], + max_age_seconds: 3000 + }, + }, + user_data: { + bucket: "${aws_s3_bucket.user_data.id}", + + cors_rule: { + allowed_headers: ["*"], + allowed_methods: ["GET", "PUT", "POST", "HEAD", "DELETE"], + allowed_origins: [ + "http://localhost" + ] + if settings.useCustomDNS then + [ "https://%s" % [settings.wwwEndpoint] ] + else + [ "https://${aws_cloudfront_distribution.npk.domain_name}" ], + expose_headers : ["x-amz-meta-lines", "x-amz-meta-size", "x-amz-meta-type", "content-length", "ETag"], + max_age_seconds: 3000 + }, + } + }, + aws_s3_bucket_notification: { + uploads: { + bucket: "${aws_s3_bucket.dictionary.id}", + + lambda_function: { + lambda_function_arn: "${aws_lambda_function.compression_pipe.arn}", + events: ["s3:ObjectCreated:*"], + filter_prefix: "to_process/" + }, + + depends_on: ["aws_lambda_permission.uploads"] + } + } + }, + output: { + wordlist_upload_cmd: { + value: "aws s3 cp s3://${aws_s3_bucket.dictionary.id}/to_process//" + } + } + }, + 's3_policies.tf.json': { + data: { + aws_iam_policy_document: { + s3_static_site: { + statement: { + actions: ["s3:GetObject"], + resources: ["${aws_s3_bucket.static_site.arn}/*"], + principals: { + type: "AWS", + identifiers: ["${aws_cloudfront_origin_access_identity.npk.iam_arn}"] + } + } + } + } + }, + resource: { + aws_s3_bucket_policy: { + s3_static_site: { + bucket: "${aws_s3_bucket.static_site.id}", + policy: "${data.aws_iam_policy_document.s3_static_site.json}" + } + } + } + }, + 'sns.tf.json': { + resource: { + aws_sns_topic: { + critical_events: { + name: "critical_events" + } + }, + aws_sns_topic_subscription: { + critical_events_sms: { + depends_on: ["aws_cloudfront_distribution.npk"], + + topic_arn: "${aws_sns_topic.critical_events.arn}", + protocol: "email", + endpoint: settings.adminEmail + } + } + } + }, + 'sqs.tf.json': { + resource: { + aws_sqs_queue: { + api_handler_dlq: { + name: "api_handler_dlq" + }, + status_reporter_dlq: { + name: "status_reporter_dlq" + } + } + } + }, + 'sync_npkcomponents.tf.json': { + resource: { + null_resource: { + set_default_multipart_threshold: { + triggers: { + content: "${timestamp()}" + }, + + provisioner: { + "local-exec": { + command: "aws configure set default.s3.multipart_threshold 5GB", + } + } + }, + sync_npkcomponents: { + triggers: { + content: "${timestamp()}" + }, + + provisioner: { + "local-exec": { + command: "aws s3 sync s3://npk-dictionary-west-2-20181029005812750900000002 s3://${aws_s3_bucket.dictionary.id} --metadata-directive COPY --request-payer requester --source-region us-west-2 --region " + settings.primaryRegion, + } + }, + + depends_on: ["null_resource.set_default_multipart_threshold"] + } + } + }, + output: { + aws_s3_sync_bucket_command: { + value: "aws s3 sync s3://npk-dictionary-west-2-20181029005812750900000002 s3://${aws_s3_bucket.dictionary.id} --metadata-directive COPY --request-payer requester --source-region us-west-2 --region " + settings.primaryRegion + } + } + }, + 'templates.tf.json': { + data: { + template_file: { + npk_config: { + template: "${file(\"%s/templates/npk_config.tpl\")}" % sonnetry.path(), + + vars: { + aws_region: "${var.region}", + client_id: "${aws_cognito_user_pool_client.npk.id}", + user_pool_id: "${aws_cognito_user_pool.npk.id}", + identity_pool_id: "${aws_cognito_identity_pool.main.id}", + userdata_bucket: "${aws_s3_bucket.user_data.id}", + dictionary_bucket: "${aws_s3_bucket.dictionary.id}", + primary_region: settings.primaryRegion, + use_SAML: settings.useSAML, + saml_domain: "", + saml_redirect: "", + familyRegions: std.strReplace(std.manifestJsonEx(settings.familyRegions, ""), "\n", ""), + families: std.strReplace(std.manifestJsonEx(settings.families, ""), "\n", ""), + quotas: std.strReplace(std.manifestJsonEx(settings.quotas, ""), "\n", ""), + regions: std.strReplace(std.manifestJsonEx(settings.regions, ""), "\n", ""), + api_gateway_url: if settings.useCustomDNS then + settings.apiEndpoint + else + "${element(split(\"/\", aws_api_gateway_deployment.%s.invoke_url), 2)}" % apiName + } + (if settings.useSAML && !settings.useCustomDNS then { + saml_domain: "${aws_cognito_user_pool_domain.saml.domain}.auth." + settings.primaryRegion + ".amazoncognito.com", + saml_redirect: "https://${aws_cloudfront_distribution.npk.domain_name}" + } else {}) + (if settings.useSAML && settings.useCustomDNS then { + saml_domain: settings.authEndpoint, + saml_redirect: "https://" + settings.wwwEndpoint + } else {}) + }, + userdata_template: { + template: "${file(\"%s/templates/userdata.tpl\")}" % sonnetry.path(), + + vars: { + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + userdata: "${aws_s3_bucket.user_data.id}", + userdataRegion: settings.primaryRegion + } + } + } + }, + resource: { + local_file: { + npk_config: { + content: "${data.template_file.npk_config.rendered}", + filename: "${path.module}/../site-content/angular/npk_config.js", + }, + userdata_template: { + content: "${data.template_file.userdata_template.rendered}", + filename: "%s/lambda_functions/execute_campaign/userdata.sh" % sonnetry.path(), + } + } + } + }, + 'templates-selfhost.tf.json': { + data: { + template_file: { + upload_npkfile: { + template: "${file(\"%s/templates/upload_npkfile.sh.tpl\")}" % sonnetry.path(), + + vars: { + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + dictionaryBucketRegion: settings.primaryRegion + } + }, + upload_npkcomponents: { + template: "${file(\"%s/templates/upload_npkcomponents.sh.tpl\")}" % sonnetry.path(), + + vars: { + dictionaryBucket: "${aws_s3_bucket.dictionary.id}", + dictionaryBucketRegion: settings.primaryRegion, + basepath: "${path.module}" + } + } + } + }, + resource: { + local_file: { + upload_npkfile: { + content: "${data.template_file.upload_npkfile.rendered}", + filename: "${path.module}/../tools/upload_npkfile.sh" + }, + upload_npkcomponents: { + content: "${data.template_file.upload_npkcomponents.rendered}", + filename: "${path.module}/../tools/upload_npkcomponents.sh" + } + } + } + }, + 'variables.tf.json': { + variable: variables.variables(settings) + { + region: { default: settings.primaryRegion }, + campaign_data_ttl: { default: settings.campaign_data_ttl }, + campaign_max_price: { default: settings.campaign_max_price }, + useSAML: { default: settings.useSAML } + } + } +} + { + ['vpc-%s.tf.json' % region]: vpc.public_vpc("npk", region, "172.21.16.0/20", settings.regions[region], ['s3']) + for region in regionKeys +} + { + ['../lambda_functions/%s/accountDetails.json' % name]: accountDetails + for name in ['compression_pipe', 'create_campaign', 'delete_campaign', 'execute_campaign', 'spot_monitor'] +} \ No newline at end of file diff --git a/terraform/cloudwatch-policy.tf b/terraform/cloudwatch-policy.tf deleted file mode 100644 index 799e665..0000000 --- a/terraform/cloudwatch-policy.tf +++ /dev/null @@ -1,14 +0,0 @@ -data "aws_iam_policy_document" "cloudwatch_invoke_spot_monitor" { - - statement { - sid = "1" - - actions = [ - "lambda:InvokeFunction" - ] - - resources = [ - "${aws_lambda_function.spot_monitor.arn}" - ] - } -} \ No newline at end of file diff --git a/terraform/cognito_iam_roles.tf.bak b/terraform/cognito_iam_roles.tf.bak deleted file mode 100644 index e3fc64c..0000000 --- a/terraform/cognito_iam_roles.tf.bak +++ /dev/null @@ -1,178 +0,0 @@ -data "aws_iam_policy_document" "cognito_authenticated" { - - /* TODO: This might require revision, but it's the default for Cognito-assumable roles */ - statement { - sid = "1" - - actions = [ - "cognito-identity:*", - "mobileanalytics:PutEvents", - "cognito-sync:*", - "ec2:describeSpotPriceHistory", - "pricing:*" - ] - - resources = [ - "*" - ] - } - - statement { - sid = "2" - - actions = [ - "s3:PutObject" - ] - - resources = [ - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/uploads/*" - ] - } - - // TODO: This statement doesn't restrict file, mime, or content types - // IAM doesn't support such restrictions. - // Write an S3 upload hook to boot not-ok files. - statement { - sid = "3" - - actions = [ - "s3:GetObject", - "s3:ListObjectVersions", - "s3:DeleteObject" - ] - - resources = [ - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}", - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/*" - ] - } - - statement { - sid = "4" - - actions = [ - "s3:ListBucket" - ] - - resources = [ - "${aws_s3_bucket.user_data.arn}", - ] - - condition { - test = "StringLike" - variable = "s3:prefix" - - values = [ - "&{cognito-identity.amazonaws.com:sub}/", - "&{cognito-identity.amazonaws.com:sub}/*", - ] - } - } - - statement { - sid = "5" - - actions = [ - "s3:ListBucket" - ] - - resources = [ - "${aws_s3_bucket.user_data.arn}", - ] - - condition { - test = "StringLike" - variable = "s3:prefix" - - values = [ - "&{cognito-identity.amazonaws.com:sub}/", - "&{cognito-identity.amazonaws.com:sub}/*", - ] - } - } - - statement { - sid = "6" - - actions = [ - "dynamodb:GetItem", - "dynamodb:BatchGetItem", - "dynamodb:Query" - ] - - resources = [ - "${aws_dynamodb_table.campaigns.arn}", - "${aws_dynamodb_table.settings.arn}" - ] - - condition { - test = "ForAllValues:StringEquals" - variable = "dynamodb:LeadingKeys" - - values = [ - "&{cognito-identity.amazonaws.com:sub}", - "admin" - ] - } - } - - statement { - sid = "7" - - actions = [ - "s3:ListBucket" - ] - - resources = [ - "${var.dictionary-east-1}", - "${var.dictionary-east-2}", - "${var.dictionary-west-1}", - "${var.dictionary-west-2}" - ] - } - - statement { - sid = "8" - - actions = [ - "s3:GetObject" - ] - - resources = [ - "${var.dictionary-east-1}/*", - "${var.dictionary-east-2}/*", - "${var.dictionary-west-1}/*", - "${var.dictionary-west-2}/*" - ] - } - - statement { - sid = "9" - - actions = [ - "execute-api:Invoke" - ] - - resources = [ - "${aws_api_gateway_deployment.npk.execution_arn}/*/userproxy/*" - ] - } - - /* TODO: Add DynamoDB and Lambda policy items */ -} - -data "aws_iam_policy_document" "cognito_unauthenticated" { - statement { - sid = "1" - - actions = [ - "cognito-identity:*", - "mobileanalytics:PutEvents", - "cognito-sync:*" - ] - - resources = [ - "*" - ] - } -} diff --git a/terraform/deploy.sh b/terraform/deploy.sh deleted file mode 100755 index e426916..0000000 --- a/terraform/deploy.sh +++ /dev/null @@ -1,239 +0,0 @@ -#! /bin/bash - -if [[ $1 == "" ]]; then - TERBIN=terraform -else - TERBIN=$1 -fi - -ERR=0; -if [[ ! -f $(which jsonnet) ]]; then - ERR=1; - echo "Error: Must have 'jsonnet' command installed."; -fi - -if [[ ! -f $(which jq) ]]; then - ERR=1; - echo "Error: Must have 'jq' command installed."; -fi - -if [[ ! -f $(which aws) ]]; then - ERR=1; - echo "Error: Must have AWSCLI installed."; -fi - -if [[ ! -f $(which npm) ]]; then - ERR=1; - echo "Error: Must have NPM installed."; -fi - -if [[ ! -f $(which terraform) ]]; then - ERR=1; - echo "Error: Must have Terraform installed."; -fi - -if [[ "$($TERBIN -v | grep v0.11 | wc -l)" != "1" ]]; then - ERR=1; - echo "Error: Wrong version of Terraform is installed. NPK requires Terraform v0.11."; - echo "-> Note: A non-default binary can be specified as positional script parameter:" - echo "-> e.g: ./deploy-selfhost.sh " - echo "" -fi - -if [[ -f $(which snap) ]]; then - if [[ $(snap list | grep $TERBIN | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: Terraform cannot be installed via snap. Download the v0.11 binary manually and place it in your path." - fi - - if [[ $(snap list | grep jsonnet | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: jsonnet cannot be installed via snap. Download the binary manually and place it in your path." - fi - - if [[ $(snap list | grep jq | wc -l) -ne 0 ]]; then - ERR=1; - echo "Error: jq cannot be installed via snap. Install via apt or download in manually and place it in your path." - fi -fi - -if [[ "$ERR" == "1" ]]; then - echo -e "\nInstall missing components, then try again.\n" - exit 1 -fi - -PROFILE=$(jq -r '.awsProfile' npk-settings.json) - -export AWS_DEFAULT_REGION=us-west-2 -export AWS_DEFAULT_OUTPUT=json -export AWS_PROFILE=$PROFILE - -# Disable Pager for AWS CLI v2 -if [[ $(aws --version | grep "aws-cli/2" | wc -l) -ge 1 ]]; then - export AWS_PAGER=""; -fi - -BUCKET=$(jq -r '.backend_bucket' npk-settings.json) - -if [[ "$BUCKET" == "" ]]; then - echo "No backend bucket is specified in npk-settings.json. This is best practice and required for NPKv2." - echo "If you specify a bucket that doesn't exist, NPK will create it for you. How easy is that?" - echo "Update npk-settings.json and try again." - echo "" - exit 1 -fi - -EXISTS=$(aws s3api get-bucket-location --bucket $BUCKET) -if [[ $? -ne 0 ]]; then - aws s3api create-bucket --bucket $BUCKET --create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION - - if [[ $? -ne 0 ]]; then - echo "Error creating backend_bucket. Fix that^ error then try again." - exit 1 - fi -else - if [[ "$( echo $EXISTS | jq -r '.LocationConstraint' )" != "$AWS_DEFAULT_REGION" ]]; then - echo "The backend_bucket you specified doesn't reside in the defaultRegion. Specify a bucket in us-west-2, then try again." - echo "$( echo $EXISTS | jq '.LocationConstraint' ) vs. $AWS_DEFAULT_REGION" - exit 1 - fi -fi - -echo "[*] Checking account quotas..." - -PQUOTA=$(aws service-quotas list-service-quotas --service-code ec2 | jq '.Quotas[] | select(.QuotaCode == "L-7212CCBC") | .Value') -GQUOTA=$(aws service-quotas list-service-quotas --service-code ec2 | jq '.Quotas[] | select(.QuotaCode == "L-3819A6DF") | .Value') - -if [[ $PQUOTA -eq 0 ]]; then - PQUOTA=384 -fi - -if [[ $GQUOTA -eq 0 ]]; then - GQUOTA=384 -fi - -QUOTAERR=0 -if [[ $PQUOTA -lt 16 ]]; then - QUOTAERR=1 - echo "The target account is limited to fewer than 384 vCPUs in us-west-2 for P-type instances." - echo "-> Current limit: $PQUOTA" - echo "" -fi - -if [[ $GQUOTA -lt 16 ]]; then - QUOTAERR=1 - echo "The target account is limited to fewer than 16 vCPUs in us-west-2 for G-type instances." - echo "-> Current limit: $GQUOTA" - echo "" -fi - -if [[ $QUOTAERR -eq 1 ]]; then - echo "You cannot proceed without increasing your limits." - echo "-> A limit of at least 16 is required for minimal capacity." - echo "-> A limit of 384 is required for full capacity." - echo "" - exit 1 -fi - -QUOTAWARN=0 -if [[ $PQUOTA -lt 384 ]]; then - QUOTAWARN=1 - echo "The target account is limited to fewer than 384 vCPUs in us-west-2 for P-type instances." - echo "-> Current limit: $PQUOTA" - echo "" -fi - -if [[ $GQUOTA -lt 384 ]]; then - QUOTAWARN=1 - echo "The target account is limited to fewer than 384 vCPUs in us-west-2 for G-type instances." - echo "-> Current limit: $GQUOTA" - echo "" -fi - -if [[ $QUOTAWARN -eq 1 ]]; then - echo "1. Attempting to create campaigns in excess of these limits will fail". - echo "2. The UI will not prevent you from requesting campaigns in excess of these limits." - echo "3. The UI does not yet indicate when requests fail due to exceeded limits." - echo "" - echo "tl;dr: You can ignore this warning, but probably don't." - echo "" - read -r -p " Do you understand? [Yes]: " key - - if [[ "$key" != "Yes" ]]; then - echo "You must accept the campaign size warning with 'Yes' in order to continue." - echo "" - - exit 1 - fi -fi - - -echo "[*] Preparing to deploy NPK." - -jq -n --arg PQUOTA "$PQUOTA" --arg GQUOTA "$GQUOTA" '{pquota: $PQUOTA, gquota: $GQUOTA}' > quotas.json - -# Get the availability zones for each region -if [ ! -f regions.json ]; then - echo "[*] Getting availability zones from AWS" - while IFS= read -r region; do - echo "[*] - ${region}" - aws ec2 --region ${region} describe-availability-zones | jq -r '{"'${region}'": [.AvailabilityZones[] | select(.State=="available") | .ZoneName]}' > region-${region}.json - done <<< $(echo '["us-east-1", "us-east-2", "us-west-1", "us-west-2"]' | jq -r '.[]') - - jq -rs 'reduce .[] as $item ({}; . * $item)' ./region-*.json > regions.json - rm region-*.json - - if [[ "$(cat regions.json | wc -l)" -lt "4" ]]; then - echo -e "\n[!] Error retrieving AWS availability zones. Check the 'awsProfile' setting and try again" - rm regions.json - exit 1 - fi -else - echo "[*] Using known availability zones. Delete regions.json to force re-evaluation." -fi - -if [[ ! -d .terraform ]]; then - echo "[+] Creating service-linked roles for EC2 spot fleets" - - # check if roles already exist - SPOTROLE=$(aws iam list-roles | jq '.Roles[] | select(.RoleName == "AWSServiceRoleForEC2Spot") | .RoleName') - FLEETROLE=$(aws iam list-roles | jq '.Roles[] | select(.RoleName == "AWSServiceRoleForEC2SpotFleet") | .RoleName') - if [ -r $SPOTROLE ]; then - aws iam create-service-linked-role --aws-service-name spot.amazonaws.com - else - echo "[*] AWSServiceRoleForEC2Spot already exists" - fi - if [ -r $FLEETROLE ]; then - aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com - else - echo "[*] AWSServiceRoleForEC2SpotFleet already exists" - fi -fi - -# remove old configs silently: -rm -f *.tf.json - - -echo "[*] Generating Terraform configurations" -jsonnet -m . terraform.jsonnet - -if [[ "$?" -eq "1" ]]; then - echo "" - echo "[!] An error occurred generating the config files. Address the error and try again." - echo "" - exit 1 -fi - -aws s3api head-object --bucket $BUCKET --key c6fc.io/npk/terraform.tfstate >> /dev/null -ISINIT="$?" - -if [[ ! -d .terraform || $ISINIT -ne 0 ]]; then - $TERBIN init -force-copy - - if [[ $? -ne 0 ]]; then - echo "[-] An error occurred while running 'terraform init'. Address the error and try again" - exit 1 - fi -fi - -terraform apply -auto-approve \ No newline at end of file diff --git a/terraform/dictionaries.auto.tfvars b/terraform/dictionaries.auto.tfvars deleted file mode 100644 index 0d5f768..0000000 --- a/terraform/dictionaries.auto.tfvars +++ /dev/null @@ -1,17 +0,0 @@ -/* - DO NOT EDIT THIS FILE MANUALLY - - Unless you *actually* know - - - what you're doing. - -*/ - -/* Dictionaries Variables */ - -dictionary-us-east-1 = "arn:aws:s3:::npk-dictionary-east-1-20181029005812833000000004" -dictionary-us-east-2 = "arn:aws:s3:::npk-dictionary-east-2-20181029005812776500000003" -dictionary-us-west-1 = "arn:aws:s3:::npk-dictionary-west-1-20181029005812746900000001" -dictionary-us-west-2 = "arn:aws:s3:::npk-dictionary-west-2-20181029005812750900000002" - -dictionary-us-east-1-id = "npk-dictionary-east-1-20181029005812833000000004" -dictionary-us-east-2-id = "npk-dictionary-east-2-20181029005812776500000003" -dictionary-us-west-1-id = "npk-dictionary-west-1-20181029005812746900000001" -dictionary-us-west-2-id = "npk-dictionary-west-2-20181029005812750900000002" \ No newline at end of file diff --git a/terraform/jsonnet/acm.libsonnet b/terraform/jsonnet/acm.libsonnet deleted file mode 100644 index b3b3091..0000000 --- a/terraform/jsonnet/acm.libsonnet +++ /dev/null @@ -1,33 +0,0 @@ -local certificate(dns_name) = { - "provider": "aws.us-east-1", - "domain_name": dns_name, - "validation_method": "DNS" -}; - -local certificate_validation(arn, fqdns) = { - "provider": "aws.us-east-1" , - "certificate_arn": arn, - "validation_record_fqdns": [fqdns] -}; - -local route53_record(name, type, records, zone) = { - "name": name, - "type": type, - "zone_id": zone, - "records": [records], - "ttl": 60 -}; - -local manual_record(name, type, records) = { - "value": "Create [" + type + "] record at [" + name + "] with value [" + records + "]" -}; - -{ - "certificate": certificate, - "certificate_validation": certificate_validation, - "route53_record": route53_record, - "manual_record": manual_record, - "lifecycle": { - "create_before_destroy": true - } -} \ No newline at end of file diff --git a/terraform/jsonnet/api_gateway.libsonnet b/terraform/jsonnet/api_gateway.libsonnet deleted file mode 100644 index bfd7478..0000000 --- a/terraform/jsonnet/api_gateway.libsonnet +++ /dev/null @@ -1,211 +0,0 @@ -local base_path(domain_name) = { - "api_id": "${aws_api_gateway_rest_api.npk.id}", - "base_path": "${aws_api_gateway_deployment.npk.stage_name}", - "stage_name": "${aws_api_gateway_deployment.npk.stage_name}", - "domain_name": domain_name -}; - -local domain_name(name, arn) = { - "domain_name": name, - "certificate_arn": arn -}; - -{ - "base_path": base_path, - "domain_name": domain_name, - "resource": { - "aws_api_gateway_rest_api": { - "npk": { - "name": "npk", - } - }, - "aws_api_gateway_authorizer": { - "npk": { - "name": "npk", - "type": "COGNITO_USER_POOLS", - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "provider_arns": [ - "${aws_cognito_user_pool.npk.arn}" - ] - } - }, - "aws_api_gateway_deployment": { - "npk": { - "depends_on": [ - "aws_api_gateway_integration.npk_proxy", - "aws_api_gateway_integration.npk_status_report", - "aws_api_gateway_integration.options_integration", - "aws_api_gateway_integration.options_integration_status_report" - ], - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "stage_name": "v1" - } - }, - "aws_api_gateway_resource": { - "proxy_parent": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "parent_id": "${aws_api_gateway_rest_api.npk.root_resource_id}", - "path_part": "userproxy" - }, - "proxy": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "parent_id": "${aws_api_gateway_resource.proxy_parent.id}", - "path_part": "{proxy+}" - }, - "status_report_parent": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "parent_id": "${aws_api_gateway_rest_api.npk.root_resource_id}", - "path_part": "statusreport" - }, - "status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "parent_id": "${aws_api_gateway_resource.status_report_parent.id}", - "path_part": "{proxy+}" - } - }, - "aws_api_gateway_method_response": { - "options_200": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.proxy.id}", - "http_method": "${aws_api_gateway_method.options_method.http_method}", - "status_code": "200", - "response_models": { - "application/json": "Empty", - }, - "response_parameters": { - "method.response.header.Access-Control-Allow-Headers": true, - "method.response.header.Access-Control-Allow-Methods": true, - "method.response.header.Access-Control-Allow-Origin": true - }, - "depends_on": ["aws_api_gateway_method.options_method"] - }, - "options_200_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.status_report.id}", - "http_method": "${aws_api_gateway_method.options_method_status_report.http_method}", - "status_code": "200", - "response_models": { - "application/json": "Empty", - }, - "response_parameters": { - "method.response.header.Access-Control-Allow-Headers": true, - "method.response.header.Access-Control-Allow-Methods": true, - "method.response.header.Access-Control-Allow-Origin": true - }, - "depends_on": ["aws_api_gateway_method.options_method_status_report"] - } - }, - "aws_api_gateway_method": { - "npk_proxy": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.proxy.id}", - "http_method": "ANY", - "authorization": "AWS_IAM", - "request_parameters": { - "method.request.path.proxy": true - } - }, - "options_method": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.proxy.id}", - "http_method": "OPTIONS", - "authorization": "NONE" - }, - "npk_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.status_report.id}", - "http_method": "POST", - "authorization": "AWS_IAM", - "request_parameters": { - "method.request.path.proxy": true - } - }, - "options_method_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.status_report.id}", - "http_method": "OPTIONS", - "authorization": "NONE" - } - }, - "aws_lambda_permission": { - "npk_apigw_lambda": { - "statement_id": "AllowExecutionFromAPIGateway", - "action": "lambda:InvokeFunction", - "function_name": "${aws_lambda_function.proxy_api_handler.arn}", - "principal": "apigateway.amazonaws.com", - "source_arn": "arn:aws:execute-api:${var.region}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.npk.id}/*/*/*" - }, - "npk_apigw_statusreport_lambda": { - "statement_id": "AllowExecutionFromAPIGateway", - "action": "lambda:InvokeFunction", - "function_name": "${aws_lambda_function.status_reporter.arn}", - "principal": "apigateway.amazonaws.com", - "source_arn": "arn:aws:execute-api:${var.region}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.npk.id}/*/*/*" - } - }, - "aws_api_gateway_integration": { - "options_integration": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.proxy.id}", - "http_method": "${aws_api_gateway_method.options_method.http_method}", - "type": "MOCK", - "request_templates": { - "application/json": "{\"statusCode\": 200}", - }, - "depends_on": ["aws_api_gateway_method.options_method"] - }, - "npk_proxy": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - resource_id: "${aws_api_gateway_resource.proxy.id}", - http_method: "${aws_api_gateway_method.npk_proxy.http_method}", - integration_http_method: "POST", - "type": "AWS_PROXY", - "uri": "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.proxy_api_handler.arn}/invocations" - }, - "npk_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - resource_id: "${aws_api_gateway_resource.status_report.id}", - http_method: "${aws_api_gateway_method.npk_status_report.http_method}", - integration_http_method: "POST", - "type": "AWS_PROXY", - "uri": "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${aws_lambda_function.status_reporter.arn}/invocations" - }, - "options_integration_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.status_report.id}", - "http_method": "${aws_api_gateway_method.options_method_status_report.http_method}", - "type": "MOCK", - "request_templates": { - "application/json": "{\"statusCode\": 200}", - }, - "depends_on": ["aws_api_gateway_method.options_method_status_report"] - } - }, - "aws_api_gateway_integration_response": { - "options_integration_response": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.proxy.id}", - "http_method": "${aws_api_gateway_method.options_method.http_method}", - "status_code": "${aws_api_gateway_method_response.options_200.status_code}", - "response_parameters": { - "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - "method.response.header.Access-Control-Allow-Methods": "'GET,OPTIONS,POST,PUT,DELETE'", - "method.response.header.Access-Control-Allow-Origin": "'*'", - }, - "depends_on": ["aws_api_gateway_method_response.options_200"] - }, - "options_integration_response_status_report": { - "rest_api_id": "${aws_api_gateway_rest_api.npk.id}", - "resource_id": "${aws_api_gateway_resource.status_report.id}", - "http_method": "${aws_api_gateway_method.options_method_status_report.http_method}", - "status_code": "${aws_api_gateway_method_response.options_200_status_report.status_code}", - "response_parameters": { - "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,POST'", - "method.response.header.Access-Control-Allow-Origin": "'*'", - }, - "depends_on": ["aws_api_gateway_method_response.options_200_status_report"] - } - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/backend.libsonnet b/terraform/jsonnet/backend.libsonnet deleted file mode 100644 index fd31882..0000000 --- a/terraform/jsonnet/backend.libsonnet +++ /dev/null @@ -1,14 +0,0 @@ -local backend(settings) = { - terraform: { - backend: { - s3: { - bucket: settings.backend_bucket, - key: "c6fc.io/npk/terraform.tfstate", - profile: settings.awsProfile, - region: settings.defaultRegion - } - }, - } -}; - -backend \ No newline at end of file diff --git a/terraform/jsonnet/cloudfront.libsonnet b/terraform/jsonnet/cloudfront.libsonnet deleted file mode 100644 index e9eb9f8..0000000 --- a/terraform/jsonnet/cloudfront.libsonnet +++ /dev/null @@ -1,79 +0,0 @@ - -{ - resource(settings): { - "aws_cloudfront_origin_access_identity": { - "npk": { - "comment": "OAI for NPK", - }, - }, - "aws_cloudfront_distribution": { - "npk": { - "comment": "NPK", - "enabled": true, - "is_ipv6_enabled": false, - "default_root_object": "index.html", - "logging_config": { - "include_cookies": false, - "bucket": "${aws_s3_bucket.logs.bucket_domain_name}", - "prefix": "cloudfront", - }, - "origin": { - "domain_name": "${aws_s3_bucket.static_site.bucket_regional_domain_name}", - "origin_id": "static", - - "s3_origin_config": { - "origin_access_identity": "${aws_cloudfront_origin_access_identity.npk.cloudfront_access_identity_path}", - } - }, - "default_cache_behavior": { - "allowed_methods": ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], - "cached_methods": ["GET", "HEAD"], - "target_origin_id": "static", - "forwarded_values": { - "query_string": false, - "headers": ["Origin","Access-Control-Allow-Origin","Access-Control-Request-Method","Access-Control-Request-Headers"], - "cookies": { - "forward": "none", - } - }, - "viewer_protocol_policy": "redirect-to-https", - "min_ttl": 0, - "max_ttl": 300, - "default_ttl": 0, - }, - "price_class": "PriceClass_100", - "tags": { - "Project": "NPK", - }, - "viewer_certificate": { - "cloudfront_default_certificate": true, - } - } + if std.objectHas(settings, "georestrictions") && std.length(settings.georestrictions) > 0 then { - "restrictions": { - "geo_restriction": { - "restriction_type": "whitelist", - "locations" : settings.georestrictions, - } - } - } else { - "restrictions": { - "geo_restriction": { - "restriction_type": "none", - } - } - } + if settings.useCustomDNS then { - "aliases": [i for i in settings.dnsNames.www], - "viewer_certificate": { - "cloudfront_default_certificate": false, - "acm_certificate_arn": "${aws_acm_certificate.www-0.arn}", - "ssl_support_method": "sni-only", - } - } else { } - } - }, - "output": { - "cloudfront_url": { - "value": "${aws_cloudfront_distribution.npk.domain_name}" - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/cloudwatch.libsonnet b/terraform/jsonnet/cloudwatch.libsonnet deleted file mode 100644 index 1e6629b..0000000 --- a/terraform/jsonnet/cloudwatch.libsonnet +++ /dev/null @@ -1,36 +0,0 @@ -{ - "resource": { - "aws_cloudwatch_event_rule": { - "spot_monitor": { - "name": "npkSpotMonitor", - "description": "Trigger spot monitor every 1 minute", - "schedule_expression": "rate(1 minute)", - "role_arn": "${aws_iam_role.cloudwatch_invoke_spot_monitor.arn}", - "is_enabled": true - } - }, - "aws_cloudwatch_event_target":{ - "spot_monitor": { - "rule": "${aws_cloudwatch_event_rule.spot_monitor.name}", - "arn": "${aws_lambda_function.spot_monitor.arn}" - } - }, - "aws_iam_role":{ - "cloudwatch_invoke_spot_monitor": { - "name_prefix": "npk_cloudwatch_spot_monitor_", - "description": "Cloudwatch Spot Monitor Role", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow","Principal": {"Service": ["events.amazonaws.com"]}, - "Action": "sts:AssumeRole" - }]}' - } - }, - "aws_iam_role_policy":{ - "cloudwatch_invoke_spot_monitor": { - "name_prefix": "npk_cloudwatch_invoke_spot_monitor_policy_", - "role": "${aws_iam_role.cloudwatch_invoke_spot_monitor.id}", - "policy": "${data.aws_iam_policy_document.cloudwatch_invoke_spot_monitor.json}" - } - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/cognito.libsonnet b/terraform/jsonnet/cognito.libsonnet deleted file mode 100644 index f61c4f2..0000000 --- a/terraform/jsonnet/cognito.libsonnet +++ /dev/null @@ -1,132 +0,0 @@ -{ - resource(settings): { - "aws_cognito_user_pool": { - "npk": { - "name": "NPK", - "mfa_configuration": "${var.cognito_user_mfa}", - "password_policy": { - "minimum_length": 12, - "require_lowercase": true, - "require_uppercase": true, - "require_symbols": false, - "require_numbers": true - }, - "admin_create_user_config": { - "allow_admin_create_user_only": true, - "invite_message_template": { - "email_subject": "NPK Invitation", - "email_message": "You've been invited to join an NPK deployment at https://${aws_cloudfront_distribution.npk.domain_name}. Use {username} and {####} to log in.", - "sms_message": "NPK user created. Use {username} and {####} to log in." - } + if settings.useCustomDNS then { - "email_message": "You've been invited to join an NPK deployment at https://" + settings.dnsNames.www[0] + ". Use {username} and {####} to log in." - } else { } - }, - "auto_verified_attributes": ["email"], - "username_attributes": ["email"] - } - }, - "aws_cognito_user_pool_client": { - "npk": { - "name": "npk_client", - "user_pool_id": "${aws_cognito_user_pool.npk.id}", - "generate_secret": false - } + if settings.useSAML == true then { - "allowed_oauth_flows_user_pool_client": "true", - "supported_identity_providers": ["${aws_cognito_identity_provider.saml.provider_name}"], - "allowed_oauth_scopes": ["email", "openid"], - "allowed_oauth_flows": ["code"], - "callback_urls": if settings.useCustomDNS == true then [ - "https://" + settings.dnsNames.www[0] - ] else [ - "https://${aws_cloudfront_distribution.npk.domain_name}" - ], - "logout_urls": if settings.useCustomDNS == true then [ - "https://" + settings.dnsNames.www[0] - ] else [ - "https://${aws_cloudfront_distribution.npk.domain_name}" - ] - } else {} - }, - "aws_cognito_identity_pool": { - "main": { - "identity_pool_name": "NPK Identity Pool", - "allow_unauthenticated_identities": false, - "cognito_identity_providers": { - "client_id": "${aws_cognito_user_pool_client.npk.id}", - "provider_name": "${aws_cognito_user_pool.npk.endpoint}", - "server_side_token_check": false, - }, - "provisioner": { - "local-exec": { - "command": "aws --region " + settings.defaultRegion + " --profile " + settings.awsProfile + " cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --user-attributes '[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}", - "on_failure": "continue" - } - } - } - }, - "aws_cognito_user_group": { - "npk-admins": { - "name": "npk-admins", - "user_pool_id": "${aws_cognito_user_pool.npk.id}", - "description": "Administrators of NPK", - "precedence": "0", - "role_arn": "${aws_iam_role.cognito_admins.arn}" - } - } - } + (if settings.useSAML == true then { - "aws_cognito_identity_provider": { - "saml": { - "user_pool_id": "${aws_cognito_user_pool.npk.id}", - "provider_name": "NPKSAML", - "provider_type": "SAML", - - "provider_details": { - "IDPSignout": "false" - } + if std.objectHas(settings, "sAMLMetadataUrl") then { - "MetadataURL": settings.sAMLMetadataUrl - } else {} + if std.objectHas(settings, "sAMLMetadataFile") then { - "MetadataFile": "${file(\"" + settings.sAMLMetadataFile + "\")}" - } else {}, - - "attribute_mapping": { - "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" - } - } - } - } else {}) + (if settings.useSAML == true && settings.useCustomDNS == false then { - "aws_cognito_user_pool_domain": { - "saml": { - "domain": "${random_string.saml_domain.result}", - "user_pool_id": "${aws_cognito_user_pool.npk.id}" - } - } - } else {}) + (if settings.useSAML == true && settings.useCustomDNS == true then { - "aws_cognito_user_pool_domain": { - "saml": { - "domain": "auth." + settings.dnsNames.www[0], - "certificate_arn": "${aws_acm_certificate.saml.arn}", - "user_pool_id": "${aws_cognito_user_pool.npk.id}" - } - } - } else {}), - output(settings): { - "admin_create_user_command": { - "value": "aws --region " + settings.defaultRegion + " --profile " + settings.awsProfile + " cognito-idp admin-create-user --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --user-attributes '[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}" - }, - "admin_join_group_command": { - "value": "aws --region " + settings.defaultRegion + " --profile " + settings.awsProfile + " cognito-idp admin-add-user-to-group --user-pool-id ${aws_cognito_user_pool.npk.id} --username ${random_string.admin_password.keepers.admin_email} --group npk-admins --user-attributes '[{\"Name\": \"email\", \"Value\": \"${random_string.admin_password.keepers.admin_email}\"}, {\"Name\": \"email_verified\", \"Value\": \"true\"}]' --temporary-password ${random_string.admin_password.result}" - } - } + (if settings.useSAML == true then { - "saml_entity_id": { - "value": "urn:amazon:cognito:sp:${aws_cognito_user_pool.npk.id}" - } - } else {}) + (if settings.useSAML == true && settings.useCustomDNS == false then { - "saml_acs_url": { - "value": "https://${random_string.saml_domain.result}.auth.us-west-2.amazoncognito.com/saml2/idpresponse" - } - } else {}) + (if settings.useSAML == true && settings.useCustomDNS == true then { - "saml_acs_url": { - "value": "https://auth." + settings.dnsNames.www[0] + "/saml2/idpresponse" - } - } else {}) -} \ No newline at end of file diff --git a/terraform/jsonnet/cognito_iam_roles.libsonnet b/terraform/jsonnet/cognito_iam_roles.libsonnet deleted file mode 100644 index 620296c..0000000 --- a/terraform/jsonnet/cognito_iam_roles.libsonnet +++ /dev/null @@ -1,283 +0,0 @@ -{ - "resource": { - "aws_iam_role": { - "cognito_admins": { - "name_prefix": "cognito_admin_role_", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow", - "Principal": {"Federated": "cognito-identity.amazonaws.com"}, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": {"cognito-identity.amazonaws.com:aud": "${aws_cognito_identity_pool.main.id}"}, - "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"} - }}]}' - }, - "cognito_authenticated": { - "name_prefix": "cognito_authenticated_role_", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow", - "Principal": {"Federated": "cognito-identity.amazonaws.com"}, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": {"cognito-identity.amazonaws.com:aud": "${aws_cognito_identity_pool.main.id}"}, - "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"} - }}]}' - }, - "cognito_unauthenticated": { - "name_prefix": "cognito_unauthenticated_role_", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"}, - "Action": "sts:AssumeRoleWithWebIdentity"} - ]}' - }, - }, - "aws_iam_role_policy": { - "cognito_admins": { - "name_prefix": "cognito_admins_policy_", - "role": "${aws_iam_role.cognito_admins.id}", - "policy": "${data.aws_iam_policy_document.cognito_admins.json}" - }, - "cognito_admins_baseline": { - "name_prefix": "cognito_baseline_policy_", - "role": "${aws_iam_role.cognito_admins.id}", - "policy": "${data.aws_iam_policy_document.cognito_authenticated.json}" - }, - "cognito_authenticated": { - "name_prefix": "cognito_authenticated_policy_", - "role": "${aws_iam_role.cognito_authenticated.id}", - "policy": "${data.aws_iam_policy_document.cognito_authenticated.json}" - }, - "cognito_unauthenticated": { - "name_prefix": "cognito_authenticated_policy_", - "role": "${aws_iam_role.cognito_unauthenticated.id}", - "policy": "${data.aws_iam_policy_document.cognito_unauthenticated.json}" - } - }, - "aws_cognito_identity_pool_roles_attachment": { - "default": { - "identity_pool_id": "${aws_cognito_identity_pool.main.id}", - "roles": { - "authenticated": "${aws_iam_role.cognito_authenticated.arn}", - "unauthenticated": "${aws_iam_role.cognito_unauthenticated.arn}" - }, - - "role_mapping": { - "identity_provider": "${aws_cognito_user_pool.npk.endpoint}:${aws_cognito_user_pool_client.npk.id}", - "ambiguous_role_resolution": "AuthenticatedRole", - "type": "Rules", - - "mapping_rule": [{ - "claim": "cognito:groups", - "match_type": "Contains", - "value": "npk-admins", - "role_arn": "${aws_iam_role.cognito_admins.arn}" - }] - } - } - } - }, - data(settings):: - local regionKeys = std.objectFields(settings.regions); - { - "aws_iam_policy_document": { - "cognito_admins": { - "statement": [{ - "sid": "adminSettings", - "actions": [ - "dynamodb:PutItem", - ], - "resources": [ - "${aws_dynamodb_table.settings.arn}" - ], - "condition": [{ - "test": "ForAllValues:StringEquals", - "variable": "dynamodb:LeadingKeys", - - "values": [ - "admin" - ] - }, { - "test": "ForAllValues:StringEquals", - "variable": "dynamodb:Attributes", - - "values": [ - "userid", - "keyid", - "value", - ] - }] - }, { - "sid": "events", - "actions": [ - "dynamodb:Query", - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}/index/Events" - ] - }, { - "sid": "cognitoAdmin", - "actions": [ - "cognito-idp:AdminAddUserToGroup", - "cognito-idp:AdminCreateUser", - "cognito-idp:AdminDeleteUser", - "cognito-idp:AdminDisableUser", - "cognito-idp:AdminEnableUser", - "cognito-idp:AdminListUserAuthEvents", - "cognito-idp:AdminRemoveUserFromGroup", - "cognito-idp:AdminResetUserPassword", - "cognito-idp:ListUsers", - "cognito-idp:ListUsersInGroup" - ], - "resources": [ - "${aws_cognito_user_pool.npk.arn}" - ] - }, { - "sid": "cognitoIdentities", - "actions": [ - "cognito-idp:ListIdentities", - "cognito-idp:DescribeIdentity", - ], - "resources": [ - "${aws_cognito_identity_pool.main.arn}" - ] - }] - }, - "cognito_authenticated": { - "statement": [{ - "sid": "1", - "actions": [ - "cognito-identity:*", - "mobileanalytics:PutEvents", - "cognito-sync:*", - "ec2:describeSpotPriceHistory", - "pricing:*" - ], - "resources": [ - "*" - ] - },{ - "sid": "2", - "actions": [ - "s3:PutObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/uploads/*" - ] - },{ - "sid": "3", - "actions": [ - "s3:GetObject", - "s3:ListObjectVersions", - "s3:DeleteObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}", - "${aws_s3_bucket.user_data.arn}/&{cognito-identity.amazonaws.com:sub}/*" - ] - },{ - "sid": "4", - "actions": [ - "s3:ListBucket" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}", - ], - "condition": [{ - "test": "StringLike", - "variable": "s3:prefix", - - "values": [ - "&{cognito-identity.amazonaws.com:sub}/", - "&{cognito-identity.amazonaws.com:sub}/*" - ] - }] - },{ - "sid": "5", - "actions": [ - "dynamodb:GetItem", - "dynamodb:BatchGetItem", - "dynamodb:Query" - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}", - "${aws_dynamodb_table.settings.arn}" - ], - "condition": [{ - "test": "ForAllValues:StringEquals", - "variable": "dynamodb:LeadingKeys", - - "values": [ - "&{cognito-identity.amazonaws.com:sub}", - "admin" - ] - }] - },{ - "sid": "settings", - "actions": [ - "dynamodb:PutItem", - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}", - "${aws_dynamodb_table.settings.arn}" - ], - "condition": [{ - "test": "ForAllValues:StringEquals", - "variable": "dynamodb:LeadingKeys", - - "values": [ - "&{cognito-identity.amazonaws.com:sub}" - ] - }, { - "test": "ForAllValues:StringEquals", - "variable": "dynamodb:Attributes", - - "values": [ - "userid", - "keyid", - "value" - ] - }] - },{ - "sid": "6", - "actions": [ - "s3:ListBucket" - ], - "resources": [ - "${var.dictionary-" + regionKeys[i] + "}" - for i in std.range(0, std.length(regionKeys) - 1) - ] - },{ - "sid": "7", - "actions": [ - "s3:GetObject" - ], - "resources": [ - "${var.dictionary-" + regionKeys[i] + "}/*" - for i in std.range(0, std.length(regionKeys) - 1) - ] - },{ - "sid": "8", - "actions": [ - "execute-api:Invoke" - ], - "resources": [ - "${aws_api_gateway_deployment.npk.execution_arn}/*/userproxy/*" - ] - }] - }, - "cognito_unauthenticated": { - "statement": [{ - "sid": "logs", - "actions": [ - "cognito-identity:*", - "mobileanalytics:PutEvents", - "cognito-sync:*" - ], - "resources": [ - "*" - ] - }] - } - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/lambda_functions.libsonnet b/terraform/jsonnet/lambda_functions.libsonnet deleted file mode 100644 index 9a22a41..0000000 --- a/terraform/jsonnet/lambda_functions.libsonnet +++ /dev/null @@ -1,184 +0,0 @@ -{ - resources(settings):: - local regionKeys = std.objectFields(settings.regions); - { - "aws_lambda_function": { - "proxy_api_handler": { - "depends_on": ["data.archive_file.proxy_api_handler", "aws_iam_role_policy.lambda_proxy_api_handler"], - "filename": "./lambda_functions/zip_files/proxy_api_handler.zip", - "function_name": "proxy_api_handler", - "role": "${aws_iam_role.lambda_proxy_api_handler.arn}", - "handler": "main.main", - "source_code_hash": "${data.archive_file.proxy_api_handler.output_base64sha256}", - "runtime": "nodejs12.x", - "timeout": 60, - - "environment": { - "variables": { - - "www_dns_names": std.toString(settings.dnsNames.www), - "campaign_max_price": "${var.campaign_max_price}", - "gQuota": settings.quotas.gquota, - "pQuota": settings.quotas.pquota, - "userdata_bucket": "${aws_s3_bucket.user_data.id}", - "instanceProfile": "${aws_iam_instance_profile.npk_node.arn}", - "iamFleetRole": "${aws_iam_role.npk_fleet_role.arn}", - "availabilityZones": std.manifestJsonEx({ - [regionKeys[i]]: { - [settings.regions[regionKeys[i]][azi]]: "${aws_subnet." + settings.regions[regionKeys[i]][azi] + ".id}" - for azi in std.range(0, std.length(settings.regions[regionKeys[i]]) - 1) - } - for i in std.range(0, std.length(regionKeys) - 1) - }, ""), - "dictionaryBuckets": std.manifestJsonEx({ - [regionKeys[i]]: "${var.dictionary-" + regionKeys[i] + "-id}" - for i in std.range(0, std.length(regionKeys) - 1) - }, ""), - "apigateway": if settings.useCustomDNS then - settings.dnsNames.api[0] - else - "${aws_api_gateway_rest_api.npk.id}.execute-api." + settings.defaultRegion + ".amazonaws.com" - } - }, - - "dead_letter_config": { - "target_arn": "${aws_sqs_queue.api_handler_dlq.arn}" - } - } + if std.objectHas(settings, "debug_lambda") && settings.debug_lambda == true then { - "tracing_config": { - "mode": "Active" - } - } else {}, - "status_reporter": { - "depends_on": ["data.archive_file.status_reporter", "aws_iam_role_policy.lambda_status_reporter"], - "filename": "./lambda_functions/zip_files/status_reporter.zip", - "function_name": "status_reporter", - "role": "${aws_iam_role.lambda_status_reporter.arn}", - "handler": "main.main", - "source_code_hash": "${data.archive_file.status_reporter.output_base64sha256}", - "runtime": "nodejs12.x", - "timeout": 60, - - "environment": { - "variables": { - "www_dns_name": std.toString(settings.dnsNames.www), - "region": "${var.region}", - "campaign_max_price": "${var.campaign_max_price}", - "critical_events_sns_topic": "${aws_sns_topic.critical_events.id}", - "availabilityZones": std.manifestJsonEx({ - [regionKeys[i]]: { - [settings.regions[regionKeys[i]][azi]]: "${aws_subnet." + settings.regions[regionKeys[i]][azi] + ".id}" - for azi in std.range(0, std.length(settings.regions[regionKeys[i]]) - 1) - } - for i in std.range(0, std.length(regionKeys) - 1) - }, "") - } - }, - - "dead_letter_config": { - "target_arn": "${aws_sqs_queue.status_reporter_dlq.arn}" - }, - } + if std.objectHas(settings, "debug_lambda") && settings.debug_lambda == true then { - "tracing_config": { - "mode": "Active" - } - } else {}, - "spot_monitor": { - "depends_on": ["data.archive_file.spot_monitor", "aws_iam_role_policy.lambda_spot_monitor"], - "filename": "./lambda_functions/zip_files/spot_monitor.zip", - "function_name": "spot_monitor", - "role": "${aws_iam_role.lambda_spot_monitor.arn}", - "handler": "main.main", - "source_code_hash": "${data.archive_file.spot_monitor.output_base64sha256}", - "runtime": "nodejs12.x", - "memory_size": 512, - "timeout": 10, - - "environment": { - "variables": { - "www_dns_name": std.toString(settings.dnsNames.www), - "region": "${var.region}", - "campaign_max_price": "${var.campaign_max_price}", - "critical_events_sns_topic": "${aws_sns_topic.critical_events.id}", - "availabilityZones": std.manifestJsonEx({ - [regionKeys[i]]: { - [settings.regions[regionKeys[i]][azi]]: "${aws_subnet." + settings.regions[regionKeys[i]][azi] + ".id}" - for azi in std.range(0, std.length(settings.regions[regionKeys[i]]) - 1) - } - for i in std.range(0, std.length(regionKeys) - 1) - }, "") - } - }, - - "dead_letter_config": { - "target_arn": "${aws_sns_topic.critical_events.arn}" - } - } + if std.objectHas(settings, "debug_lambda") && settings.debug_lambda == true then { - "tracing_config": { - "mode": "Active" - } - } else {} - }, - "aws_lambda_permission": { - "spot_monitor": { - "statement_id": "spot_monitor", - "action": "lambda:InvokeFunction", - "function_name": "${aws_lambda_function.spot_monitor.function_name}", - "principal": "events.amazonaws.com", - "source_arn": "${aws_cloudwatch_event_rule.spot_monitor.arn}", - } - }, - "null_resource": { - "npm_install_proxy_api_handler": { - "provisioner": [{ - "local-exec": { - "command": "cd ${path.module}/lambda_functions/proxy_api_handler/ && npm install", - } - }] - }, - "npm_install_status_reporter": { - "provisioner": [{ - "local-exec": { - "command": "cd ${path.module}/lambda_functions/status_reporter/ && npm install", - } - }] - }, - "npm_install_spot_monitor": { - "provisioner": [{ - "local-exec": { - "command": "cd ${path.module}/lambda_functions/spot_monitor/ && npm install", - } - }] - } - } - }, - "data": { - "archive_file": { - "proxy_api_handler": { - "depends_on": [ - "null_resource.npm_install_proxy_api_handler", - "local_file.userdata_template" - ], - "type": "zip", - "source_dir": "${path.module}/lambda_functions/proxy_api_handler/", - "output_path": "${path.module}/lambda_functions/zip_files/proxy_api_handler.zip", - }, - "status_reporter": { - "depends_on": [ - "null_resource.npm_install_status_reporter" - ], - "type": "zip", - "source_dir": "${path.module}/lambda_functions/status_reporter/", - "output_path": "${path.module}/lambda_functions/zip_files/status_reporter.zip", - }, - "spot_monitor": { - "depends_on": [ - "null_resource.npm_install_spot_monitor" - ], - "type": "zip", - "source_dir": "${path.module}/lambda_functions/spot_monitor/", - "output_path": "${path.module}/lambda_functions/zip_files/spot_monitor.zip", - } - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/lambda_iam_roles.libsonnet b/terraform/jsonnet/lambda_iam_roles.libsonnet deleted file mode 100644 index 8948b18..0000000 --- a/terraform/jsonnet/lambda_iam_roles.libsonnet +++ /dev/null @@ -1,260 +0,0 @@ - - -{ - resource(settings):: { - "aws_iam_role": { - "lambda_proxy_api_handler": { - "name_prefix": "npk_lambda_api_handler_role_", - "description": "Lambda API Gateway Proxy Handler Role", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com"]}, - "Action": "sts:AssumeRole" - }]}' - }, - "lambda_status_reporter": { - "name_prefix": "npk_lambda_status_reporter_role_", - "description": "Lambda Status Reporter Role", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com"]}, - "Action": "sts:AssumeRole" - }]}' - }, - "lambda_spot_monitor": { - "name_prefix": "npk_lambda_spot_monitor_role_", - "description": "Lambda Spot Monitor Role", - "assume_role_policy": '{"Version": "2012-10-17","Statement": [{ - "Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com"]}, - "Action": "sts:AssumeRole" - }]}' - } - }, - "aws_iam_role_policy": { - "lambda_proxy_api_handler": { - "name_prefix": "npk_lambda_api_handler_policy_", - "role": "${aws_iam_role.lambda_proxy_api_handler.id}", - - "policy": "${data.aws_iam_policy_document.lambda_proxy_api_handler.json}", - }, - "lambda_status_reporter": { - "name_prefix": "npk_lambda_status_reporter_policy_", - "role": "${aws_iam_role.lambda_status_reporter.id}", - - "policy": "${data.aws_iam_policy_document.lambda_status_reporter.json}", - }, - "lambda_spot_monitor": { - "name_prefix": "npk_lambda_spot_monitor_policy_", - "role": "${aws_iam_role.lambda_spot_monitor.id}", - - "policy": "${data.aws_iam_policy_document.lambda_spot_monitor.json}", - } - } - } + if std.objectHas(settings, "debug_lambda") && settings.debug_lambda == true then { - "aws_iam_policy_attachment": { - "lambda_proxy_api_handler-xray": { - "name": "lambda_proxy_api_handler-xray", - "roles": ["${aws_iam_role.lambda_proxy_api_handler.id}"], - - "policy_arn": "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess", - }, - "lambda_status_reporter-xray": { - "name": "lambda_status_reporter-xray", - "roles": ["${aws_iam_role.lambda_status_reporter.id}"], - - "policy_arn": "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess", - }, - "lambda_spot_monitor-xray": { - "name": "lambda_spot_monitor-xray", - "roles": ["${aws_iam_role.lambda_spot_monitor.id}"], - - "policy_arn": "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess", - } - } - } else {}, - data(settings):: - local regionKeys = std.objectFields(settings.regions); - { - "aws_iam_policy_document": { - "lambda_proxy_api_handler": { - "statement": [{ - "sid": "logs", - "actions": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "resources": [ - "arn:aws:logs:*:*:*" - ] - },{ - "sid": "1", - "actions": [ - "s3:PutObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/*/campaigns/*/manifest.json", - "${aws_s3_bucket.logs.arn}/api_gateway_proxy/*", - ] - },{ - "sid": "2", - "actions": [ - "s3:GetObject", - "s3:DeleteObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/*" - ] - },{ - "sid": "3", - "actions": [ - "s3:GetObject" - ], - "resources": [ - "${var.dictionary-" + regionKeys[i] + "}/*" - for i in std.range(0, std.length(regionKeys) - 1) - ] - },{ - "sid": "4", - "actions": [ - "sqs:SendMessage" - ], - "resources": [ - "${aws_sqs_queue.api_handler_dlq.arn}" - ] - },{ - "sid": "5", - "actions": [ - "ec2:CancelSpotFleetRequests", - "ec2:DescribeImages", - "ec2:DescribeSpotFleetRequests", - "ec2:DescribeSpotPriceHistory", - "ec2:RequestSpotFleet", - "ec2:RunInstances", - "ec2:CreateTags" - ], - "resources": ["*"] - },{ - "sid": "6", - "actions": [ - "dynamodb:Query", - "dynamodb:UpdateItem", - "dynamodb:DeleteItem" - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}" - ] - },{ - "sid": "7", - "actions": [ - "iam:PassRole" - ], - "resources": [ - "${aws_iam_role.npk_instance_role.arn}", - "${aws_iam_role.npk_fleet_role.arn}" - ] - },{ - "sid": "adminGetUser", - "actions": [ - "cognito-idp:AdminGetUser" - ], - "resources": [ - "${aws_cognito_user_pool.npk.arn}" - ] - }] - }, - "lambda_status_reporter": { - "statement": [{ - "sid": "logs", - "actions": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "resources": [ - "arn:aws:logs:*:*:*" - ] - },{ - "sid": "1", - "actions": [ - "s3:PutObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/*", - "${aws_s3_bucket.logs.arn}/api_gateway_proxy/*", - ] - },{ - "sid": "2", - "actions": [ - "s3:GetObject", - "s3:DeleteObject" - ], - "resources": [ - "${aws_s3_bucket.user_data.arn}/*" - ] - },{ - "sid": "3", - "actions": [ - "dynamodb:Query", - "dynamodb:UpdateItem" - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}" - ] - },{ - "sid": "4", - "actions": [ - "sqs:SendMessage" - ], - "resources": [ - "${aws_sqs_queue.status_reporter_dlq.arn}" - ] - }] - }, - "lambda_spot_monitor": { - "statement": [{ - "sid": "1", - "actions": [ - "sns:Publish" - ], - "resources": [ - "${aws_sns_topic.critical_events.arn}" - ] - },{ - "sid": "2", - "actions": [ - "ec2:CancelSpotFleetRequests", - "ec2:DescribeTags", - "ec2:DescribeInstances", - "ec2:DescribeInstanceStatus", - "ec2:DescribeSpotFleetRequests", - "ec2:DescribeSpotFleetRequestHistory", - "ec2:DescribeSpotFleetInstances", - "ec2:DescribeSpotInstanceRequests", - "ec2:DescribeSpotPriceHistory" - ], - "resources": ["*"] - },{ - "sid": "3", - "actions": [ - "dynamodb:GetItem", - "dynamodb:UpdateItem", - "dynamodb:Query" - ], - "resources": [ - "${aws_dynamodb_table.campaigns.arn}", - "${aws_dynamodb_table.campaigns.arn}/index/SpotFleetRequests" - ] - },{ - "sid": "4", - "actions": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "resources": [ - "arn:aws:logs:*:*:*" - ] - }] - } - } - } -} \ No newline at end of file diff --git a/terraform/jsonnet/templates.libsonnet b/terraform/jsonnet/templates.libsonnet deleted file mode 100644 index 7217f93..0000000 --- a/terraform/jsonnet/templates.libsonnet +++ /dev/null @@ -1,63 +0,0 @@ -local az(region) = { - [az]: "${" + az + "}" - for az in region -}; - -{ - data(settings):: - local regionKeys = std.objectFields(settings.regions); - { - "template_file": { - "npk_config": { - "template": "${file(\"${path.module}/templates/npk_config.tpl\")}", - - "vars": { - "aws_region": "${var.region}", - "client_id": "${aws_cognito_user_pool_client.npk.id}", - "user_pool_id": "${aws_cognito_user_pool.npk.id}", - "identity_pool_id": "${aws_cognito_identity_pool.main.id}", - "userdata_bucket": "${aws_s3_bucket.user_data.id}", - "use_SAML": "${var.useSAML}", - "saml_domain": "", - "saml_redirect": "", - "g_quota": settings.quotas.gquota, - "p_quota": settings.quotas.pquota, - "api_gateway_url": if settings.useCustomDNS then - settings.dnsNames.api[0] - else - "${element(split(\"/\", aws_api_gateway_deployment.npk.invoke_url), 2)}" - } + (if settings.useSAML == true && settings.useCustomDNS == false then { - "saml_domain": "${aws_cognito_user_pool_domain.saml.domain}.auth.us-west-2.amazoncognito.com", - "saml_redirect": "https://${aws_cloudfront_distribution.npk.domain_name}" - } else {}) + (if settings.useSAML == true && settings.useCustomDNS == true then { - "saml_domain": "auth." + settings.dnsNames.www[0], - "saml_redirect": "https://" + settings.dnsNames.www[0] - } else {}) - }, - "userdata_template": { - "template": "${file(\"${path.module}/templates/userdata.tpl\")}", - - "vars": { - "dictionaryBuckets": std.strReplace(std.manifestJsonEx({ - [regionKeys[i]]: "${var.dictionary-" + regionKeys[i] + "-id}" - for i in std.range(0, std.length(regionKeys) - 1) - }, ""), "\n", ""), - "userdata": "${aws_s3_bucket.user_data.id}" - } - } - } - }, - "resource": { - "local_file": { - "npk_config": { - "content": "${data.template_file.npk_config.rendered}", - "filename": "${path.module}/../site-content/angular/npk_config.js", - }, - "userdata_template": { - "content": "${data.template_file.userdata_template.rendered}", - "filename": "${path.module}/lambda_functions/proxy_api_handler/userdata.sh", - } - } - }, - "az": az -} \ No newline at end of file diff --git a/terraform/jsonnet/variables.libsonnet b/terraform/jsonnet/variables.libsonnet deleted file mode 100644 index 8dc7738..0000000 --- a/terraform/jsonnet/variables.libsonnet +++ /dev/null @@ -1,18 +0,0 @@ -{ - variables(settings):: - local regionKeys = std.objectFields(settings.regions); - { - "campaign_max_price": {}, - "campaign_data_ttl": {}, - "cognito_user_mfa": { - "default": "OFF" - }, - "useSAML": { }, - } + { - ["dictionary-" + regionKeys[i]]: {} - for i in std.range(0, std.length(regionKeys) - 1) - } + { - ["dictionary-" + regionKeys[i] + "-id"]: {} - for i in std.range(0, std.length(regionKeys) - 1) - } -} \ No newline at end of file diff --git a/terraform/jsonnet/vpc.libsonnet b/terraform/jsonnet/vpc.libsonnet deleted file mode 100644 index 1a7e688..0000000 --- a/terraform/jsonnet/vpc.libsonnet +++ /dev/null @@ -1,15 +0,0 @@ -local vpc(region, index) = { - provider: "aws." + region, - cidr_block: "10." + (200 + (index - 1)) + ".0.0/16" -}; - -local endpoint(region) = { - provider: "aws." + region, - vpc_id: "${aws_vpc." + region + ".id}", - service_name: "com.amazonaws." + region + ".s3" -}; - -{ - vpc: vpc, - endpoint: endpoint -} \ No newline at end of file diff --git a/terraform/lambda_functions/proxy_api_handler/main.js b/terraform/lambda_functions/proxy_api_handler/main.js deleted file mode 100644 index fd9d759..0000000 --- a/terraform/lambda_functions/proxy_api_handler/main.js +++ /dev/null @@ -1,1138 +0,0 @@ -/*jshint esversion: 6 */ -/*jshint node: true */ - -"use strict"; - -var fs = require('fs'); -var AWSXRay = require('aws-xray-sdk'); -var aws = AWSXRay.captureAWS(require('aws-sdk')); -var uuid = require('uuid/v4'); -var ddbTypes = require('dynamodb-data-types').AttributeValue; -var variables = JSON.parse(JSON.stringify(process.env)); -variables.availabilityZones = JSON.parse(variables.availabilityZones); -variables.dictionaryBuckets = JSON.parse(variables.dictionaryBuckets); - -var cb = ""; -var origin = ""; - -aws.config.apiVersions = { - dynamodb: '2012-08-10', - sqs: '2012-11-05', - sns: '2010-03-31' -}; - -aws.config.update({region: 'us-west-2'}); - -var db = new aws.DynamoDB(); -var sns = new aws.SNS(); -var sqs = new aws.SQS(); -var cognito = new aws.CognitoIdentityServiceProvider({region: "us-west-2", apiVersion: "2016-04-18"}); - -var s3 = new aws.S3({region: variables.default_region}); -var s3dict; - -var allowed_regions = [ - "us-west-1", - "us-west-2", - "us-east-1", - "us-east-2" -]; - -var allowed_instances = [ - // "g3s.xlarge", - "g3.4xlarge", - "g3.8xlarge", - "g3.16xlarge", - - "p2.xlarge", - "p2.8xlarge", - "p2.16xlarge", - - "p3.2xlarge", - "p3.8xlarge", - "p3.16xlarge" -]; - -var vcpus = { - "g3.4xlarge": 16, - "g3.8xlarge": 32, - "g3.16xlarge": 64, - - "p2.xlarge": 4, - "p2.8xlarge": 32, - "p2.16xlarge": 64, - - "p3.2xlarge": 8, - "p3.8xlarge": 32, - "p3.16xlarge": 64 -} - -process.on('unhandledRejection', error => { - console.log('unhandledRejection', error.message); -}); - -Object.prototype.require = function (elements) { - var self = this; - - var result = true; - Object.keys(elements).forEach(function (e) { - if (typeof self[e] == "undefined") { - return respond(417, {msg: 'Object state assertion failed: ' + e + ' does not exist.', object: self}, false); - } - - if (typeof elements[e] == "object") { - result = self[e].require(elements[e]); - } - }); -}; - -function getCampaignManifest(entity, campaign) { - return new Promise((success, failure) => { - s3.getObject({ - Bucket: variables.userdata_bucket, - Key: entity + '/campaigns/' + campaign + '/manifest.json' - }, function(err, data) { - if (err) { - return failure(respond(400, "Failed to obtain campaign manifest: " + err, false)); - } - - var manifest = ""; - - try { - manifest = JSON.parse(data.Body.toString('ascii')); - } catch (e) { - return failure(respond(500, "Unable to read manifest contents: " + e, false)); - } - - return success(manifest); - }); - }); -} - -function invalidMethod(path, method) { - return respond(418, "No. I'm a teapot.", false); -} - -function getActiveCampaigns(entity) { - return new Promise((success, failure) => { - db.query({ - ExpressionAttributeValues: { - ':id': {S: entity}, - ':keyid': {S: "campaigns:"} - }, - KeyConditionExpression: 'userid = :id and begins_with(keyid, :keyid)', - TableName: "Campaigns" - }, function (err, data) { - if (err) { - return failure(respond(500, "Unable to retrieve active campaigns.", false)); - } - - return success(data); - }); - }); -} - -function getCampaign(entity, campaign) { - return new Promise((success, failure) => { - db.query({ - ExpressionAttributeValues: { - ':id': {S: entity}, - ':keyid': {S: "campaigns:" + campaign} - }, - KeyConditionExpression: 'userid = :id and keyid = :keyid', - TableName: "Campaigns" - }, function (err, data) { - if (err) { - return failure(respond(500, "Unable to retrieve active campaigns. " + err, false)); - } - - return success(data); - }); - }); -} - -function editCampaign(entity, campaign, values) { - return new Promise((success, failure) => { - values = ddbTypes.wrap(values); - - Object.keys(values).forEach(function(e) { - values[e] = { - Action: "PUT", - Value: values[e] - }; - }); - - var ddbParams = { - Key: { - userid: {S: entity}, - keyid: {S: "campaigns:" + campaign} - }, - TableName: "Campaigns", - AttributeUpdates: values - }; - - db.updateItem(ddbParams, function (err, data) { - if (err) { - return failure(respond(500, "Error updating table: " + err, false)); - } - - return success(data); - }); - }); -} - -function deleteCampaign(entity, campaign) { - return new Promise((success, failure) => { - // Delete all status reports and events; - db.query({ - ExpressionAttributeValues: { - ':id': {S: entity}, - ':keyid': {S: campaign + ":"} - }, - KeyConditionExpression: 'userid = :id and begins_with(keyid, :keyid)', - TableName: "Campaigns" - }, function (err, data) { - if (err) { - return failure(respond(500, "Unable to retrieve active campaigns.", false)); - } - - var promises = []; - - data.Items.forEach(function(c) { - var campaign = ddbTypes.unwrap(c); - - promises.push( - new Promise((success, failure) => { - db.deleteItem({ - Key: { - userid: {S: entity}, - keyid: {S: campaign.keyid} - }, - TableName: "Campaigns" - }, function(err, data) { - if (err) { - console.log(err); - return failure(err); - } - - return success(true); - }); - })); - }); - - // Mark the campaign itself as deleted; - promises.push(editCampaign(entity, campaign, { - deleted: true - })); - - /*promises.push( - new Promise((success, failure) => { - db.deleteItem({ - Key: { - userid: {S: entity}, - keyid: {S: "campaigns:" + campaign} - }, - TableName: "Campaigns" - }, function(err, data) { - if (err) { - console.log(err); - return failure(err); - } - - return success(true); - }); - }));*/ - - Promise.all(promises).then((data) => { - return respond(200, "Deleted", true); - }, (err) => { - console.log(err); - return respond(500, "Error while deleting campaign", false); - }); - }); - }); -} - -function getObjectAverage(what) { - var sum = 0; - var count = 0; - - Object.keys(what).forEach(function(e) { - sum += Number(what[e]); - count++; - }); - - return sum / count; -} - -var knownInstanceAZs = {}; -function getInstanceAZs(region, instanceType) { - - return new Promise((success, failure) => { - - if (typeof knownInstanceAZs[instanceType] == "undefined") { - knownInstanceAZs[instanceType] = {}; - } - - if (typeof knownInstanceAZs[instanceType][region] != "undefined") { - return success(knownInstanceAZs[instanceType][region]); - } - - var ec2 = new aws.EC2({region: region}); - ec2.describeSpotPriceHistory({ - EndTime: Math.round(Date.now() / 1000), - ProductDescriptions: [ - "Linux/UNIX (Amazon VPC)" - ], - InstanceTypes: [ - instanceType - ], - StartTime: Math.round(Date.now() / 1000) - }, function (err, data) { - if (err) { - return failure(respond(500, "Error obtaining spot price: " + err, false)); - } - - var zones = []; - data.SpotPriceHistory.forEach(function(e) { - zones[e.AvailabilityZone] = e.SpotPrice; - }); - - knownInstanceAZs[instanceType][region] = zones; - - return success(zones); - }); - }); -} - -function getNVidiaImage(region) { - console.log("Debug: Retrieving NVidia images."); - - return new Promise((success, failure) => { - var ec2 = new aws.EC2({region: region}); - ec2.describeImages({ - Filters: [{ - Name: "virtualization-type", - Values: ["hvm"] - },{ - Name: "name", - Values: ["amzn2-ami-graphics-hvm-2*"] - },{ - Name: "root-device-type", - Values: ["ebs"] - },{ - Name: "owner-id", - Values: ["679593333241"] - }] - }, function (err, data) { - if (err) { - return failure(respond(500, "Error finding NVidia AMI: " + err, false)); - } - - console.log(data.Images.length + " NVidia images found."); - - var image = {CreationDate: '1980-01-01T00:00:00.000Z'}; - data.Images.forEach(function(e) { - if (new Date(e.CreationDate).getTime() > new Date(image.CreationDate).getTime()) { - image = e; - } - }); - - console.log("Using image " + JSON.stringify(image)); - - return success(image); - }); - }); - - /* Doing a hackery hardcoded workaround for now. - var map = { - "us-east-1": "ami-0a569854f46c69795", - // "us-east-2": "", I guess us-east-2 doesn't have the AMI? - "us-west-1": "ami-0910dc69af49c661a", - "us-west-2": "ami-064baf3a92b9390b9" - }; - - return map[region]; - */ -} - -function getCognitoUser(pool, username) { - return new Promise((success, failure) => { - cognito.adminGetUser({ - UserPoolId: pool, - Username: username - }).promise() - .then((data) => { - var attributes = {}; - - data.UserAttributes.forEach(function(e) { - attributes[e.Name] = e.Value; - }); - - data.UserAttributes = attributes; - - success(data); - }, (err) => { - failure(err); - }) - }) -} - -function createCampaign(entity, email, campaign) { - console.log("Debug: Creating campaign."); - campaign.require({ - "region": 0, - "availabilityZone": 0, - "instanceType": 0, - "hashFile": 0, - "instanceCount": 0, - "instanceDuration": 0, - "priceTarget": 0 - }); - - var verifiedManifest = { - rulesFiles: [], - cognitoIdentityId: entity - }; - - if (parseInt(campaign.hashType) < 0 || parseInt(campaign.hashType > 100000)) { - return respond(400, "hashType " + campaign.hashType + " is invalid", false); - } - - verifiedManifest.hashType = campaign.hashType; - - if (parseInt(campaign.instanceCount) < 1 || parseInt(campaign.instanceCount) > 6) { - return respond(400, "instanceCount must be greater than 1", false); - } - - verifiedManifest.instanceCount = campaign.instanceCount; - - if (parseInt(campaign.instanceDuration) < 1 || parseInt(campaign.instanceDuration) > 24) { - return respond(400, "instanceDuration must be between 1 and 24", false); - } - - verifiedManifest.instanceDuration = campaign.instanceDuration; - - if (allowed_regions.indexOf(campaign.region) < 0) { - return respond(400, campaign.region + " is not a valid or allowed region", false); - } - - verifiedManifest.region = campaign.region; - - if (Object.keys(vcpus).indexOf(campaign.instanceType) < 0) { - return respond(400, campaign.instanceType + " is not a valid or allowed instance type.", false); - } - - switch (campaign.instanceType.split("")[0]) { - case 'g': - var quota = variables.gQuota; - break; - - case 'p': - var quota = variables.pQuota; - break; - - default: - return respond(400, "Unable to determine applicable quota for " + campaign.instanceType, false); - break; - } - - var neededVCPUs = vcpus[campaign.instanceType] * parseInt(campaign.instanceCount); - if (quota < neededVCPUs) { - return respond(400, "Order exceeds account quota limits. Needs " + neededVCPUs + " but account is limited to " + quota, false); - } - - verifiedManifest.instanceType = campaign.instanceType; - - if (parseFloat(campaign.priceTarget) < 0 || parseFloat(campaign.priceTarget) != campaign.priceTarget) { - return respond(400, "Invalid priceTarget; must be integer greater than 0.", false); - } - - verifiedManifest.priceTarget = campaign.priceTarget; - - try { - var expires = /Expires=([\d]+)&/.exec(campaign.hashFileUrl)[1]; - } catch (e) { - return respond(400, "Invalid hashFileUrl.", false); - } - - var duration = expires - (new Date().getTime() / 1000); - if (duration < 900) { - return respond(400, "hashFileUrl must be valid for at least 900 seconds, got " + Math.floor(duration), false); - } - - verifiedManifest.hashFileUrl = campaign.hashFileUrl; - - if (campaign.manualArguments) { - verifiedManifest.manualArguments = campaign.manualArguments; - } - - if (campaign.manualMask) { - if (campaign.mask || campaign.rulesFiles || campaign.dictionaryFile) { - return respond(400, "Manual masks cannot be combined with any other attack type.", false); - } - - verifiedManifest.manualMask = campaign.manualMask; - } - - // Optional values might be present, but nulled. - var promises = []; - var hashfilelines = 0; - var knownMetadata = {}; - var dictionaryKeyspace = 0; - var dictionarySize = 0; - var rulesKeyspace = 0; - var rulesSize = 0; - var lineCount = 0; - - // Verify hashfile metadata. - promises.push(new Promise((success, failure) => { - s3.headObject({ - Bucket: variables.userdata_bucket, - Key: entity + '/' + campaign.hashFile - }, function(err, data) { - if (err) { - return failure(respond(400, "Invalid hash file: " + err, false)); - } - - if (data.ContentType != "text/plain") { - return failure(respond(400, "Content Type " + data.ContentType + " not permitted. Use text/plain.", false)); - } - - knownMetadata[bucket + ":" + campaign.dictionaryFile] = data.Metadata; - // dictionaryKeyspace += data.Metadata.lines; - // dictionarySize += data.Metadata.size + data.ContentLength; - - // verifiedManifest.dictionaryFile = campaign.dictionaryFile; - - return success(); - }); - })); - - // Verify hashfile contents. - promises.push(new Promise((success, failure) => { - s3.getObject({ - Bucket: variables.userdata_bucket, - Key: entity + '/' + campaign.hashFile - }, function(err, data) { - if (err) { - return failure(respond(400, "Invalid hash file contents: " + err, false)); - } - - var body = data.Body.toString('ascii'); - var lines = body.split("\n"); - - lineCount = lines.length; - - verifiedManifest.hashFile = campaign.hashFile; - - return success(); - }); - })); - - if (typeof campaign.rulesFiles != "undefined" && campaign.rulesFiles != null) { - console.log("Debug: Rules are enabled. Verifiying files."); - campaign.require({ - "rulesFiles": 0, - "dictionaryFile": 0 - }); - - s3dict = new aws.S3({region: campaign.region}); - var bucket = variables.dictionaryBuckets[campaign.region]; - - // Verify dictionary - promises.push(new Promise((success, failure) => { - s3dict.headObject({ - Bucket: bucket, - Key: campaign.dictionaryFile - }, function(err, data) { - if (err) { - return failure(respond(400, "Invalid dictionary file: " + err, false)); - } - - knownMetadata[bucket + ":" + campaign.dictionaryFile] = data.Metadata; - dictionaryKeyspace += data.Metadata.lines; - dictionarySize += parseInt(data.Metadata.size) + parseInt(data.ContentLength); - - verifiedManifest.dictionaryFile = campaign.dictionaryFile; - - console.log("Debug: Dictionary file verified"); - return success(); - }); - })); - - // Verify rule files - campaign.rulesFiles.forEach(function(e) { - promises.push(new Promise((success, failure) => { - s3dict.headObject({ - Bucket: bucket, - Key: e, - }, function(err, data) { - if (err) { - return failure(respond(400, "Invalid rule file: " + err, false)); - } - - knownMetadata[bucket + ":" + e] = data.Metadata; - rulesKeyspace += data.Metadata.lines; - rulesSize += parseInt(data.Metadata.size) + parseInt(data.ContentLength); - - verifiedManifest.rulesFiles.push(e); - - console.log("Debug: Rules files verified"); - return success(); - }); - })); - }); - } - - var maskKeyspace = 1; - if (typeof campaign.mask != "undefined" && campaign.mask != null) { - console.log("Debug: Mask is enabled. Verifying mask."); - campaign.mask.split('?').slice(1).forEach(function(e) { - switch (e) { - case "l": - maskKeyspace *= 26; - break; - - case "u": - maskKeyspace *= 26; - break; - - case "d": - maskKeyspace *= 10; - break; - - case "s": - maskKeyspace *= 33; - break; - - case "a": - maskKeyspace *= 95; - break; - - case "b": - maskKeyspace *= 256; - break; - - default: - return respond(400, "Invalid mask provided", false); - break; - } - }); - - verifiedManifest.mask = campaign.mask; - } - - promises.push(getActiveCampaigns(entity).then(function(data) { - - data.Items.forEach(function(i) { - i = ddbTypes.unwrap(i); - - if (i.active) { - respond(429, "Too many active campaigns.", false); - return Promise.reject('Too many active campaigns'); - } - }); - - console.log("Debug: No other active campaigns."); - return Promise.resolve(true); - })); - - return Promise.all(promises).then((data) => { - console.log("Debug: All promises returned."); - - // Compare the manifest with the verifiedManifest, and return any values that weren't processed. - - Object.keys(verifiedManifest).forEach(function(e) { - delete campaign[e]; - }); - - console.log("Debug: Processing complete. The following parameters from the campaign were not used."); - console.log(campaign); - - var wordlistKeyspace = ((dictionaryKeyspace > 0) ? dictionaryKeyspace : 1) * ((rulesKeyspace > 0) ? rulesKeyspace : 1); - - console.log("d: " + dictionarySize); - console.log("r: " + rulesSize); - var wordlistSize = dictionarySize + rulesSize; - var totalKeyspace = wordlistKeyspace * maskKeyspace; - - verifiedManifest.wordlistSize = wordlistSize; - - if (typeof verifiedManifest.dictionaryFile != "undefined") { - if (typeof verifiedManifest.mask != "undefined") { - verifiedManifest.attackType = 6; - } else { - verifiedManifest.attackType = 0; - } - } else { - if (typeof verifiedManifest.mask == "undefined" && typeof verifiedManifest.manualMask == "undefined") { - return respond(400, "Must have either dictionary or mask defined", false); - } - - verifiedManifest.attackType = 3; - } - - if (typeof verifiedManifest.rulesFiles != "undefined" && verifiedManifest.rulesFiles.length > 0 && typeof verifiedManifest.manualMask == "undefined") { - verifiedManifest.attackType = 0; - } - - if (typeof verifiedManifest.attackType == "undefined") { - return respond(500, "Hit an impossible combination of attack types. Exiting.", false); - } - - var promiseError = false; - var campaignId = uuid(); - // campaignId = "9c3ac117-ea93-4884-8e22-67cbece8dc89"; - return s3.putObject({ - Body: JSON.stringify(verifiedManifest), - Bucket: variables.userdata_bucket, - Key: entity + '/campaigns/' + campaignId + '/manifest.json', - ContentType: 'text/plain' - }).promise().then((data) => { - return editCampaign(entity, campaignId, { - instanceType: verifiedManifest.instanceType, - status: "AVAILABLE", - active: false, - durationSeconds: verifiedManifest.instanceDuration * 3600, - hashType: verifiedManifest.hashType, - hashes: lineCount, - instanceCount: verifiedManifest.instanceCount, - price: 0, - targetPrice: verifiedManifest.priceTarget, - region: verifiedManifest.region, - startTime: Math.floor(new Date().getTime() / 1000), - spotFleetRequestId: "", - cognitoUserEmail: email, - deleted: false - }) - }, (err) => { - promiseError = err; - return respond(500, "Failed to place campaign manifest; " + err, false); - }).then(function(data) { - if (promiseError) { - console.log("Skipping due to prior error.") - return Promise.reject(false) - } - - console.log("=================================================================================================="); - console.log("====== Campaign " + campaignId + " created. Preparing to execute! ======"); - console.log("=================================================================================================="); - return respond(201, {campaignId: campaignId}, true); - // return executeCampaign(entity, campaignId); - }, function (err) { - return respond(500, "Failed to set campaign readiness; " + err, false); - }); - }); -} - -function executeCampaign(entity, campaignId) { - var campaign = {}; - var manifest = {}; - var image = {}; - - var promiseError = false; - var promiseDetails = {}; - - return getActiveCampaigns(entity).then(function(data) { - - data.Items.forEach(function(i) { - i = ddbTypes.unwrap(i); - - if (i.active) { - respond(429, "Too many active campaigns.", false); - return Promise.reject(false); - } - }); - - console.log("Debug: No other active campaigns."); - return Promise.resolve(true); - }).then((data) => { - return Promise.all([ - getCampaign(entity, campaignId).then((data) => { return {campaign: data}; }), - getCampaignManifest(entity, campaignId).then((data) => { return {manifest: data}; }), - ]); - }).then(function (data) { - - data.forEach(function(e) { - if (e.hasOwnProperty('campaign')) { - campaign = e.campaign; - } else { - manifest = e.manifest; - } - }); - - try { - var expires = /Expires=([\d]+)&/.exec(manifest.hashFileUrl)[1]; - } catch (e) { - return respond(400, "Invalid hashFileUrl.", false); - } - - var duration = expires - (new Date().getTime() / 1000); - if (duration < 900) { - return respond(400, "hashFileUrl must be valid for at least 900 seconds, got " + Math.floor(duration), false); - } - - return Promise.all([ - getInstanceAZs(manifest.region, manifest.instanceType).then((data) => { return null }), - getNVidiaImage(manifest.region) - ]); - - }).then(function(data) { - - console.log(data); - - data.forEach(function(e) { - if (e != null) { - image = e; - } - }); - - // Calculate the necessary volume size - var volumeSize = Math.ceil(manifest.wordlistSize / 1073741824) + 1; - // with a minimum of 10GB - // volumeSize = (volumeSize > 10) ? volumeSize : 10; - - // Build a launchSpecification for each AZ in the target region. - var launchSpecifications = []; - var instance_userdata = new Buffer(fs.readFileSync(__dirname + '/userdata.sh', 'utf-8').replace("{{APIGATEWAY}}", process.env.apigateway)).toString('base64'); - var launchSpecificationTemplate = { - IamInstanceProfile: { - Arn: variables.instanceProfile - }, - ImageId: image.ImageId, - KeyName: "npk-key", - InstanceType: manifest.instanceType, - BlockDeviceMappings: [{ - DeviceName: '/dev/xvdb', - Ebs: { - DeleteOnTermination: true, - Encrypted: false, - VolumeSize: volumeSize, - VolumeType: "gp2" - } - }], - NetworkInterfaces: [{ - AssociatePublicIpAddress: true, - DeviceIndex: 0, - // SubnetId: "" - }], - Placement: { - AvailabilityZone: "" - }, - TagSpecifications: [{ - ResourceType: "instance", - Tags: [{ - Key: "MaxCost", - Value: ((manifest.priceTarget < variables.campaign_max_price) ? manifest.priceTarget : variables.campaign_max_price).toString() - }, { - Key: "ManifestPath", - Value: entity + '/campaigns/' + campaignId - }] - }], - UserData: instance_userdata - }; - - Object.keys(knownInstanceAZs[manifest.instanceType][manifest.region]).forEach(function(e) { - var az = JSON.parse(JSON.stringify(launchSpecificationTemplate)); // Have to deep-copy to avoid referential overrides. - az.Placement.AvailabilityZone = e; - az.NetworkInterfaces[0].SubnetId = variables.availabilityZones[manifest.region][e]; - - launchSpecifications.push(az); - }); - - var spotPrice = getObjectAverage(knownInstanceAZs[manifest.instanceType][manifest.region]); - var maxDuration = (Number(manifest.instanceDuration) < variables.campaign_max_price / spotPrice) ? Number(manifest.instanceDuration) : variables.campaign_max_price / spotPrice; - - console.log(spotPrice, maxDuration, variables.campaign_max_price); - - var spotFleetParams = { - SpotFleetRequestConfig: { - AllocationStrategy: "lowestPrice", - IamFleetRole: variables.iamFleetRole, - InstanceInterruptionBehavior: "terminate", - LaunchSpecifications: launchSpecifications, - SpotPrice: (manifest.priceTarget / (manifest.instanceCount * manifest.instanceDuration) * 2).toString(), - TargetCapacity: manifest.instanceCount, - ReplaceUnhealthyInstances: false, - TerminateInstancesWithExpiration: true, - Type: "request", - ValidFrom: (new Date().getTime() / 1000), - ValidUntil: (new Date().getTime() / 1000) + (maxDuration * 3600) - } - }; - - console.log(JSON.stringify(spotFleetParams)); - - // Submit the fleet request. - var ec2 = new aws.EC2({region: manifest.region}); - return ec2.requestSpotFleet(spotFleetParams).promise() - - }, (err) => { - promiseError = err; - respond(500, "Unable to retrieve campaign for execution.", false); - }).then((data) => { - - if (promiseError) { - console.log("Skipping due to previous error"); - return Promise.reject(promiseError); - } - - promiseDetails.sfr = data.SpotFleetRequestId; - - return editCampaign(entity, campaignId, { - active: true, - status: "STARTING", - spotFleetRequestId: data.SpotFleetRequestId, - startTime: Math.floor(new Date().getTime() / 1000), - eventType: "CampaignStarted" - }); - - }, (err) => { - promiseError = err - return Promise.reject(respond(500, "Error requesting spot fleet: " + err, false)); - - }).then(function() { - console.log("Campaign " + campaignId + " started."); - return respond(200, {msg: "Campaign started successfully", campaignId: campaignId, spotFleetRequestId: promiseDetails.sfr}, true); - }, function (err) { - return respond(500, "Failed to set campaign as active. " + err, false); - }); - - // return respond(200, "Campaign " + campaignId + " started.", true); -} - -function stopCampaign(entity, campaign) { - - return new Promise((success, failure) => { - var campaignId = campaign.keyid.split(':')[1]; - var ec2 = new aws.EC2({region: campaign.region}); - - console.log("Starting EC2 call"); - ec2.describeSpotFleetRequests({ - SpotFleetRequestIds: [campaign.spotFleetRequestId] - }, function(err, fleet) { - - if (err) { - return failure(respond(500, "Error retrieving spot fleet data: " + err, false)); - } - - if (fleet.SpotFleetRequestConfigs.length < 1) { - // TODO: Set the campaign to inactive if this result is reliable enough. - return failure(respond(404, "Error retrieving spot fleet data: not found.", false)); - } - - var request = fleet.SpotFleetRequestConfigs[0]; - if (request.SpotFleetRequestState == "active") { - ec2.cancelSpotFleetRequests({ - SpotFleetRequestIds: [campaign.spotFleetRequestId], - TerminateInstances: true - }, function(err, response) { - if (err) { - return failure(respond(500, "Error cancelling spot fleet: " + err, false)); - } - - console.log(response); - - if (response.SuccessfulFleetRequests.length < 1) { - return failure(respond(500, "Error cancelling spot fleet: " + err, false)); - } - - if (response.SuccessfulFleetRequests[0].CurrentSpotFleetRequestState.indexOf('cancelled') < 0) { - return failure(respond(400, "Error cancelling spot fleet. Current state: " + response.SuccessfulFleetRequests[0].CurrentSpotFleetRequestState, false)); - } - - editCampaign(entity, campaignId, { - active: false - }).then(function(data) { - return success(respond(200, "Campaign stoppped.", true)); - }, function (err) { - return failure(respond(500, "Unable to deactivate campaign: " + err, false)); - }); - }); - } else { - editCampaign(entity, campaignId, { - active: false, - status: "CANCELLED" - }).then(function(data) { - return success(respond(200, "Campaign stoppped.", true)); - }, function (err) { - return failure(respond(500, "Unable to deactivate campaign: " + err, false)); - }); - } - }) - }); -} - -function processHttpRequest(path, method, entity, email, body) { - var params = path.split("/"); - - switch (params[0]) { - case "campaign": - if (typeof params[1] == "undefined") { - switch (method) { - case "POST": - return createCampaign(entity, email, body); - break; - - default: - return invalidMethod(path, method); - break; - } - } else { - if (!/^[0-9a-z\-]{36}$/.test(params[1])) { - return respond(404, "Campaign not found", false); - } - - switch (method) { - case "PUT": - return executeCampaign(entity, params[1]); - break; - - case "DELETE": - return getCampaign(entity, params[1]).then((data) => { - - if (data.Items.length < 1) { - return respond(404, "Invalid campaign", false); - } - - data = ddbTypes.unwrap(data.Items[0]); - - if (data.status == "RUNNING" || data.status == "STARTING") { - console.log("Stopping campaign " + params[1]); - return stopCampaign(entity, data); - } else { - console.log("Marking campaign deleted " + params[1]); - return deleteCampaign(entity, params[1]); - } - }); - break; - - default: - return invalidMethod(path, method); - break; - } - } - break; - } - - return respond(404, "Not found.", false); -} - -function respond(statusCode, body, success) { - - - // Include terraform dns names as allowed origins, as well as localhost. - var allowed_origins = JSON.parse(variables.www_dns_names); - allowed_origins.push("https://localhost"); - - var headers = {'Content-Type': 'text/plain'}; - if (allowed_origins.indexOf(origin) !== false) { - // Echo the origin back. I guess this is the best way to support multiple origins - headers['Access-Control-Allow-Origin'] = origin; - } - - switch (typeof body) { - case "string": - body = { msg: body, success: success }; - break; - - case "object": - body.success = success; - break; - } - - var response = { - statusCode: statusCode, - headers: headers, - body: JSON.stringify(body), - } - - console.log(JSON.stringify(response)); - - cb(null, response); - - if (success == true) { - return Promise.resolve(body.msg); - } else { - return Promise.reject(body.msg); - } -} - -exports.main = function(event, context, callback) { - - // Hand off the callback function for later. - cb = callback; - - // Try/Catch the whole thing. Cause why not. - try { - - console.log("Received event: " + JSON.stringify(event)); - - event.require({ - "body": 0, - "isBase64Encoded": 0, - "headers": 0, - "httpMethod": 0, - "pathParameters": { - "proxy": 0 - }, - "queryStringParameters": 0, - "requestContext": { - "requestId": 0, - "identity": { - "cognitoIdentityId": 0, - "cognitoAuthenticationType": 0 - } - } - }); - - // Hand off the origin, too. Fix for weird case - origin = event.headers.origin || event.headers.Origin; - - var allowed_characters = /^[a-zA-Z0-9'"%\.\[\]\{\}\(\)\-\:\\\/\;\=\?\#\_+\s,!@#\$\^\*&]+$/; - if (!allowed_characters.test(JSON.stringify(event))) { - return respond(400, "Request contains illegal characters", false); - } - - if (event.requestContext.identity.cognitoAuthenticationType != "authenticated") { - return respond(401, "Authentication Required", false); - } - - var body = {}; - // Unencode the body if necessary - if (event.body != null) { - body = (event.requestContext.isBase64Encoded) ? atob(event.body) : event.body; - - // Body will always be a JSON object. - try { - body = JSON.parse(body); - } catch (e) { - return respond(400, "Body must be JSON object", false); - } - } - - // Associate the user identity. - var identity = event.requestContext.identity.cognitoAuthenticationProvider.split('/')[2].split(':') - return getCognitoUser(identity[0], identity[2]).then((data) => { - console.log(data); - - if (!data.UserAttributes.hasOwnProperty('email')) { - return Promise.reject(respond(401, {}, { msg: "Unable to obtain user properties." ,success: false }, false)); - } - - // Process the request - return processHttpRequest(event.pathParameters.proxy, event.httpMethod, event.requestContext.identity.cognitoIdentityId, data.UserAttributes.email, body); - }).then((data) => { - console.log("Finished with message", data); - }, (err) => { - console.log("Finished with error", err); - }).then(() => { - respond(500, "Events occurred out of order. This is a bug.", false); - }); - - } catch (e) { - console.log("Fail", e); - respond(500, "Unknown Error", false); - } -}; \ No newline at end of file diff --git a/terraform/lambda_functions/proxy_api_handler/package-lock.json b/terraform/lambda_functions/proxy_api_handler/package-lock.json deleted file mode 100644 index 4bf89a7..0000000 --- a/terraform/lambda_functions/proxy_api_handler/package-lock.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "name": "proxy_api_handler", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", - "requires": { - "@types/node": "*" - } - }, - "@types/continuation-local-storage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.2.tgz", - "integrity": "sha512-aItm+aYPJ4rT1cHmAxO+OdWjSviQ9iB5UKb5f0Uvgln0N4hS2mcDodHtPiqicYBXViUYhqyBjhA5uyOcT+S34Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", - "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz", - "integrity": "sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/mysql": { - "version": "2.15.8", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", - "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", - "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==" - }, - "@types/pg": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", - "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", - "requires": { - "@types/node": "*", - "@types/pg-types": "*" - } - }, - "@types/pg-types": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz", - "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - } - }, - "atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" - }, - "aws-sdk": { - "version": "2.599.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", - "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - } - }, - "aws-xray-sdk": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-2.5.0.tgz", - "integrity": "sha512-KBTF9QUq0zu24t+gFh3VATYDNx295VzZUUjpZ1OmIEbcs3Zqmox5L6VAqjCgGfJeLaCUAWPLkduxau3LuDpqcw==", - "requires": { - "aws-xray-sdk-core": "^2.5.0", - "aws-xray-sdk-express": "^2.5.0", - "aws-xray-sdk-mysql": "^2.5.0", - "aws-xray-sdk-postgres": "^2.5.0", - "pkginfo": "^0.4.0" - } - }, - "aws-xray-sdk-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-2.5.0.tgz", - "integrity": "sha512-qe60bv0kn5KY6gAIF88TPCOIdu/A3dTmcKISj+kE4OH02eF6kMm1ctL7OgoBAasnsDNSn0VMLhIaA1izgoWuxA==", - "requires": { - "@types/continuation-local-storage": "*", - "atomic-batcher": "^1.0.2", - "aws-sdk": "^2.304.0", - "continuation-local-storage": "^3.2.0", - "date-fns": "^1.29.0", - "pkginfo": "^0.4.0", - "semver": "^5.3.0", - "winston": "^2.4.4" - } - }, - "aws-xray-sdk-express": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-2.5.0.tgz", - "integrity": "sha512-VfUXlxFlI+gr6ImMF+3000fqPRTBS9MbAywdtC8dt/U57WQbLFDjPW+V6oJowTwrkgKwpOKSXncQDfBs8QHvIw==", - "requires": { - "@types/express": "*" - } - }, - "aws-xray-sdk-mysql": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-2.5.0.tgz", - "integrity": "sha512-OI3cDkVcKTiWytwoOE1Oj0D2UbchOVHkiQNXWktDk9QYzqbOz+GNEwD5QneqyxFu0z0bQieClBM+0okUprFBXQ==", - "requires": { - "@types/mysql": "*" - } - }, - "aws-xray-sdk-postgres": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-2.5.0.tgz", - "integrity": "sha512-8LcXTjr272gKMSg9a+QSGQPjAabQb87SA0c4ZlVcPqzoG7nAd3pULR6/HDtujeukbRAb6rEoxzKvPX0s18NyFw==", - "requires": { - "@types/pg": "*" - } - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, - "dynamodb-data-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", - "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=" - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=" - }, - "winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } -} diff --git a/terraform/lambda_functions/spot_monitor/main.js b/terraform/lambda_functions/spot_monitor/main.js deleted file mode 100644 index 56425b7..0000000 --- a/terraform/lambda_functions/spot_monitor/main.js +++ /dev/null @@ -1,838 +0,0 @@ -/*jshint esversion: 6 */ -/*jshint node: true */ - -"use strict"; - -var cb = ""; -// var AWSXRay = require('aws-xray-sdk'); -// var aws = AWSXRay.captureAWS(require('aws-sdk')); -var aws = require('aws-sdk'); -var settings = JSON.parse(JSON.stringify(process.env)); -settings.availabilityZones = JSON.parse(settings.availabilityZones); - -aws.config.apiVersions = { - dynamodb: '2012-08-10' -}; - -aws.config.update({region: settings.region}); - -var db = new aws.DynamoDB(); - -Object.prototype.require = function (elements) { - var self = this; - - var result = true; - Object.keys(elements).forEach(function (e) { - if (typeof self[e] == "undefined") { - return cb('Object state assertion failed: ' + e + ' does not exist.'); - } - - if (typeof elements[e] == "object") { - result = self[e].require(elements[e]); - } - }); -}; - -var calculateSpotCosts = function(region, spotInstance) { - var prices = knownSpotPrices[region + ':' + spotInstance.LaunchSpecification.InstanceType][spotInstance.LaunchedAvailabilityZone]; - prices[Math.ceil(new Date().getTime() / 1000)] = prices[Object.keys(prices).slice(-1)]; - - var timestamps = Object.keys(prices).sort(function(a, b) { return a - b; }); - - var accCost = 0; - var accSeconds = 0; - var tempStartTime = Math.floor(new Date(spotInstance.CreateTime).getTime() / 1000); - timestamps.forEach(function(e) { - // console.log("Checking against time: " + e) - if (e <= tempStartTime) { - return true; - } - - var pps = prices[e] / 3600; - var seconds = e - tempStartTime; - - accCost += (seconds * pps); - accSeconds += seconds; - - // console.log("Costs: " + seconds + " seconds @ " + prices[e] + "/hr = " + (seconds * pps).toFixed(8)); - // console.log("Oldtime: " + tempStartTime + "; Newtime: " + (tempStartTime - seconds)); - - tempStartTime += seconds; - }); - - console.log("Instance " + spotInstance.InstanceId + " up for " + accSeconds + " seconds; estimated cost $" + accCost.toFixed(4)); - - var actualDuration = (new Date().getTime()) - (new Date(spotInstance.CreateTime).getTime()); - // console.log("^-- This should not exceed " + (actualDuration / 1000).toFixed(0)); - - return accCost; -}; - -var knownSpotPrices = {}; -var getSpotPriceHistory = function(region, instanceType) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - if (typeof knownSpotPrices[ec2.config.region + ":" + instanceType] != "undefined") { - return success(knownSpotPrices[ec2.config.region + ":" + instanceType]); - } - - ec2.describeSpotPriceHistory({ - InstanceTypes: [ - instanceType - ], - ProductDescriptions: [ - "Linux/UNIX (Amazon VPC)" - ], - // Default to retrieving the last two days' spot prices. - StartTime: (new Date().getTime() / 1000) - (60 * 60 * 48) - }, function(err, data) { - if (err) { - return failure(err); - } - - knownSpotPrices[ec2.config.region + ":" + instanceType] = {}; - data.SpotPriceHistory.forEach(function(e) { - e.require({ - "AvailabilityZone": 0, - "SpotPrice": 0, - "Timestamp": 0 - }); - - if (typeof knownSpotPrices[ec2.config.region + ":" + instanceType][e.AvailabilityZone] == "undefined") { - knownSpotPrices[ec2.config.region + ":" + instanceType][e.AvailabilityZone] = {}; - } - - knownSpotPrices[ec2.config.region + ":" + instanceType][e.AvailabilityZone][new Date(e.Timestamp).getTime() / 1000] = e.SpotPrice; - }); - - return success(knownSpotPrices[ec2.config.region + ":" + instanceType]); - }); - }); -}; - -var knownSpotFleetRequests = {}; -var listSpotFleetRequests = function(region) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - ec2.describeSpotFleetRequests({}, function(err, data) { - if (err) { - return failure(cb("Failed retrieving spot fleet information." + err)); - } - - data.SpotFleetRequestConfigs.forEach(function(e) { - knownSpotFleetRequests[e.SpotFleetRequestId] = e; - knownSpotFleetRequests[e.SpotFleetRequestId].Region = region; - }); - - return success(data.SpotFleetRequestConfigs); - }); - }); -}; - -var getSpotFleetInstances = function(region, spotFleetRequestId) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - ec2.describeSpotFleetInstances({ - SpotFleetRequestId: spotFleetRequestId - }, function(err, data) { - if (err) { - return failure(cb("Failed retrieving spot fleet information: " + err)); - } - - knownSpotFleetRequests[spotFleetRequestId].ActiveInstances = data.ActiveInstances; - - return success(data.ActiveInstances); - }); - }); -}; - -// This is better than describeSpotFleetInstances.ActiveInstances, but isn't perfect. -var getInstancesFromSpotFleetHistory = function(region, spotFleetRequestId) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - ec2.describeSpotFleetRequestHistory({ - SpotFleetRequestId: spotFleetRequestId, - StartTime: "1970-01-01T00:00:00Z" - }, function(err, data) { - if (err) { - return failure(cb("Failed retrieving spot fleet history: " + err)); - } - - var knownInstances = {}; - data.HistoryRecords.forEach(function(e) { - if (e.EventType == "instanceChange") { - knownInstances[e.EventInformation.InstanceId] = 1; - } - }); - - knownSpotFleetRequests[spotFleetRequestId].AllInstanceIds = Object.keys(knownInstances); - - return success(Object.keys(knownInstances)); - }); - }); -}; - -var spotRequestsByFleetRequest = {}; -var knownSpotInstanceRequests = {}; -var listSpotInstanceRequests = function(region) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - ec2.describeSpotInstanceRequests({}, function(err, data) { - if (err) { - return failure(cb("Failed retrieving spot request information.")); - } - - data.SpotInstanceRequests.forEach(function(e) { - knownSpotInstanceRequests[e.InstanceId] = e; - knownSpotInstanceRequests[e.InstanceId].Region = region; - - var tags = {}; - e.Tags.forEach(function(t) { - tags[t.Key] = t.Value; - }) - - spotRequestsByFleetRequest[tags["aws:ec2spot:fleet-request-id"]] = e.Status; - }); - - return success(data.SpotInstanceRequests); - }); - }); -}; - -var terminateSpotFleet = function(region, spotFleetRequestId) { - var ec2 = new aws.EC2({region: region}); - - return new Promise((success, failure) => { - ec2.cancelSpotFleetRequests({ - TerminateInstances: true, - SpotFleetRequestIds: [ - spotFleetRequestId - ] - }, function(err, data) { - if (err) { - return failure(cb(criticalAlert("Failure cancelling spot fleet: " + err))); - } - - return success(data); - }); - }); -}; - -function editCampaignViaRequestId(spotFleetRequestId, values) { - return new Promise((success, failure) => { - db.query({ - ExpressionAttributeValues: { - ':s': {S: spotFleetRequestId} - }, - KeyConditionExpression: 'spotFleetRequestId = :s', - IndexName: "SpotFleetRequests", - TableName: "Campaigns" - }, function (err, data) { - if (err) { - return failure(cb("Error querying SpotFleetRequest table: " + err)); - } - - if (data.Items.length < 1) { - return success(null); - } - - data = aws.DynamoDB.Converter.unmarshall(data.Items[0]); - console.log("Found campaign " + data.keyid.split(':').slice(1)); - - editCampaign(data.userid, data.keyid.split(':').slice(1), values).then((updates) => { - success(updates); - }); - }); - }); -} - -function editCampaign(entity, campaign, values) { - return new Promise((success, failure) => { - values = aws.DynamoDB.Converter.marshall(values); - - Object.keys(values).forEach(function(e) { - values[e] = { - Action: "PUT", - Value: values[e] - }; - }); - - var ddbParams = { - Key: { - userid: {S: entity}, - keyid: {S: "campaigns:" + campaign} - }, - TableName: "Campaigns", - AttributeUpdates: values - }; - - // console.log(JSON.stringify(ddbParams)); - - db.updateItem(ddbParams, function (err, data) { - if (err) { - return failure(err); - } - - return success(true); - }); - }); -} - -var criticalAlert = function(message) { - return new Promise((success, failure) => { - var sns = new aws.SNS({apiVersion: '2010-03-31', region: 'us-west-2'}); - - sns.publish({ - Message: "NPK CriticalAlert: " + message, - Subject: "NPK CriticalAlert", - TopicArn: settings.critical_events_sns_topic - }, function (err, data) { - if (err) { - console.log('CRITICAL ALERT FAILURE: ' + err); - return failure(err); - } - - console.log('CRITICAL ALERT: ' + message); - return success(data); - }); - }); -}; - -var evaluateAllSpotInstances = function() { - - var availabilityZones = settings.availabilityZones; - - var promises = []; - Object.keys(availabilityZones).forEach(function(region) { - // console.log(region); - promises.push(listSpotFleetRequests(region)); - promises.push(listSpotInstanceRequests(region)); - }); - - var instancePromises = []; - var cancellationPromises = []; - Promise.all(promises).then((data) => { - - Object.keys(knownSpotFleetRequests).forEach(function (e) { - if (knownSpotFleetRequests[e].SpotFleetRequestState.indexOf("cancelled") < 0) { - instancePromises.push(getInstancesFromSpotFleetHistory(knownSpotFleetRequests[e].Region, e)); - instancePromises.push(getSpotFleetInstances(knownSpotFleetRequests[e].Region, e)); - } else { - var status = (knownSpotFleetRequests[e].SpotFleetRequestState == "cancelled") ? "COMPLETED" : "CANCELLING"; - - var spotStatus = { Code: "", Message: ""}; - if (typeof spotRequestsByFleetRequest[e] != "undefined") { - spotStatus = spotRequestsByFleetRequest[e]; - delete spotStatus.UpdateTime; - } - - cancellationPromises.push(editCampaignViaRequestId(e, { - active: false, - spotRequestStatus: spotStatus, - status: status - }).then((data) => { - - if (data) { - console.log("Marked campaign with spotFleetRequestId " + e + " as " + status + "."); - } else { - console.log("Failed to mark campaign with spotFleetRequestId " + e + " as " + status + "."); - } - })); - - delete knownSpotFleetRequests[e]; - } - }); - - Object.keys(knownSpotInstanceRequests).forEach(function(s) { - instancePromises.push(getSpotPriceHistory(knownSpotInstanceRequests[s].Region, knownSpotInstanceRequests[s].LaunchSpecification.InstanceType)); - }); - - // Stop early if there are no fleets to process. - if (instancePromises.length < 1) { - return cb(null, "No active fleet requests"); - } - - Promise.all(instancePromises).then((data) => { - var finalPromises = []; - Object.keys(knownSpotFleetRequests).forEach(function(e) { - var totalCosts = 0; - var terminateFleet = false; - knownSpotFleetRequests[e].Tags = {}; - knownSpotFleetRequests[e].SpotFleetRequestConfig.LaunchSpecifications[0].TagSpecifications.forEach(function(l) { - l.Tags.forEach(function(t) { - knownSpotFleetRequests[e].Tags[t.Key] = t.Value; - }); - }); - - knownSpotFleetRequests[e].AllInstanceIds.forEach(function(i) { - //var instanceCost = calculateSpotCosts(knownSpotFleetRequests[e].Region, knownSpotInstanceRequests[i.InstanceId]); - // console.log(knownSpotInstanceRequests[i]); - var instanceCost = calculateSpotCosts(knownSpotFleetRequests[e].Region, knownSpotInstanceRequests[i]); - totalCosts += instanceCost; - - console.log(" --> current costs: $" + instanceCost.toFixed(4) + "; max cost: $" + parseFloat(knownSpotFleetRequests[e].Tags.MaxCost).toFixed(4)); - if (instanceCost > (parseFloat(knownSpotFleetRequests[e].Tags.MaxCost) * 1.1)) { - criticalAlert('Campaign costs exceeds configured limit. Terminating spot fleet request ' + e); - terminateFleet = true; - } - - if (instanceCost > parseFloat(knownSpotFleetRequests[e].Tags.MaxCost)) { - terminateFleet = true; - } - }); - - knownSpotFleetRequests[e].TotalCosts = totalCosts; - - var spotStatus = spotRequestsByFleetRequest[e]; - delete spotStatus.UpdateTime; - - console.log("Debug: Writing live status for campaign " + e); - var writeParams = { - active: true, - price: totalCosts, - spotRequestStatus: spotStatus, - status: "RUNNING" - }; - - if (totalCosts == 0) { - delete writeParams.totalCosts; - } - - finalPromises.push(editCampaignViaRequestId(e, writeParams)); - - if (totalCosts > settings.campaign_max_price) { - criticalAlert('Campaign costs exceeds configured limit. Terminating spot fleet request ' + e); - terminateFleet = true; - } - - if (terminateFleet) { - finalPromises.push(terminateSpotFleet(knownSpotFleetRequests[e].Region, e).then((data) => { - var errors = 0; - if (data.SuccessfulFleetRequests.length > 0) { - data.SuccessfulFleetRequests.forEach(function(r) { - if (r.CurrentSpotFleetRequestState != "cancelled_terminating") { - finalPromises.push(criticalAlert('Cancelled spot fleet ' + r.SpotFleetRequestId + ' is not terminating. Intervene immediately!')); - } else { - console.log('Spot fleet ' + r.SpotFleetRequestId + ' cancelled successfully.'); - } - }); - } - - if (data.UnsuccessfulFleetRequests.length > 0) { - data.UnsuccessfulFleetRequests.forEach(function(r) { - finalPromises.push(criticalAlert('Error cancelling spot fleet ' + r.SpotFleetRequestId + ': ' + r.Error.Message + '; Intervene immediately!')); - }); - } - - return Promise.resolve(true); - })); - } - }); - - return Promise.all(finalPromises).then((data) => { - cb(null, "Spot Monitor invocation completed."); - }); - }); - }); -}; - -var histories = {}; -function getSpotRequestHistory(ec2, sfr, nextToken = null) { - return ec2.describeSpotFleetRequestHistory({ - SpotFleetRequestId: sfr, - StartTime: "1970-01-01T00:00:00Z", - NextToken: nextToken - }).promise().then((data) => { - if (!histories.hasOwnProperty(sfr)) { - histories[sfr] = []; - } - - histories[sfr] = histories[sfr].concat(data.HistoryRecords); - - if (data.hasOwnProperty('NextToken')) { - return getSpotRequestHistory(ec2, sfr, data.NextToken); - } - - return true; - }); -} - -exports.main = function(event, context, callback) { - - var promiseDetails = { fleets: {}, spotPrices: {}, instances: {}, instanceStatuses: {} }; - var promiseError = false; - - var spotFleetPromises = []; - Object.keys(settings.availabilityZones).forEach(function(region) { - var ec2 = new aws.EC2({region: region}); - - spotFleetPromises.push(ec2.describeSpotFleetRequests({}).promise().then((data) => { - return { fleets: data.SpotFleetRequestConfigs, region: region }; - })); - - spotFleetPromises.push(ec2.describeSpotInstanceRequests({}).promise().then((data) => { - data.SpotInstanceRequests.forEach(function(r) { - var tags = {}; - r.Tags.forEach(function(t) { - tags[t.Key] = t.Value; - }); - - if (!tags.hasOwnProperty('aws:ec2spot:fleet-request-id')) { - return false; - } - - var sfr = tags['aws:ec2spot:fleet-request-id']; - - if (!promiseDetails.instanceStatuses.hasOwnProperty(sfr)) { - promiseDetails.instanceStatuses[sfr] = {}; - } - - promiseDetails.instanceStatuses[sfr][r.InstanceId] = { - Status: { - Code: r.Status.Code, - Message: r.Status.Message - }, - State: r.State - } - }); - - return "skip"; - })); - }); - - // Get all the spot fleets - return Promise.all(spotFleetPromises).then((fleetObjects) => { - - var fleetPromises = []; - fleetObjects.forEach(function(fleetObject) { - - // If the promise is literally "skip", then do so. - if (fleetObject === "skip") { - return true; - } - - var fleets = fleetObject.fleets; - var region = fleetObject.region; - - fleets.forEach(function(fleet) { - - // Skip fleets more than a day old, since some history items can expire before the fleet does. - if (new Date(fleet.CreateTime).getTime() < new Date().getTime() - (1000 * 60 * 60 * 24)) { - console.log(fleet.SpotFleetRequestId + " created more than a day ago. Skipping."); - return false; - } - - var ec2 = new aws.EC2({region: region}); - - promiseDetails.fleets[fleet.SpotFleetRequestId] = fleet; - promiseDetails.fleets[fleet.SpotFleetRequestId].region = region; - promiseDetails.fleets[fleet.SpotFleetRequestId].instances = {}; - promiseDetails.fleets[fleet.SpotFleetRequestId].price = 0; - - // Get the instances for each fleet - /*fleetPromises.push(ec2.describeSpotFleetInstances({ - SpotFleetRequestId: fleet.SpotFleetRequestId - }).promise().then((data) => { - // Save the active instances - promiseDetails.fleet[fleet.SpotFleetRequestId].instances = data.ActiveInstances; - }));*/ - - /* fleetPromises.push(ec2.describeSpotFleetRequestHistory({ - SpotFleetRequestId: fleet.SpotFleetRequestId, - StartTime: "1970-01-01T00:00:00Z" - }).promise().then((data) => { - if (data.) - promiseDetails.fleets[fleet.SpotFleetRequestId].history = data.HistoryRecords; - })); */ - - fleetPromises.push(getSpotRequestHistory(ec2, fleet.SpotFleetRequestId)); - }); - }); - - return Promise.all(fleetPromises); - - }, (e) => { - console.log("spotFleetPromises failed.", e); - - promiseError = e; - return Promise.resolve(e) - }).then((fleetPromises) => { - if (promiseError) { - return Promise.resolve("Skipping due to prior error."); - }; - - var spotPricePromises = []; - var removedFleetIds = []; - - // Loop over the state changes to find spot price histories we need. - Object.keys(promiseDetails.fleets).forEach(function(fleetId) { - - if (!promiseDetails.instanceStatuses.hasOwnProperty(fleetId)) { - if (promiseDetails.fleets[fleetId].SpotFleetRequestState.indexOf("cancelled") == 0) { - console.log("Inactive fleet [" + fleetId + "] has no instance statuses. Removing from the list and skipping."); - delete promiseDetails.fleets[fleetId]; - return false; - - } else { - console.log("Fleet [" + fleetId + "] with status [" + promiseDetails.fleets[fleetId].SpotFleetRequestState + "] has no instance statuses."); - } - } - - promiseDetails.fleets[fleetId].history = histories[fleetId]; - delete histories[fleetId]; - - promiseDetails.fleets[fleetId].history.forEach(function(historyRecord) { - // Skip anything that isn't an instanceChange request. - if (historyRecord.EventType != "instanceChange") { - return false; - } - - // Save the instance information for later: - var event = JSON.parse(historyRecord.EventInformation.EventDescription); - if (!promiseDetails.instances.hasOwnProperty(historyRecord.EventInformation.InstanceId)) { - promiseDetails.instances[historyRecord.EventInformation.InstanceId] = event; - promiseDetails.instances[historyRecord.EventInformation.InstanceId].spotStatus = promiseDetails.instanceStatuses[fleetId][historyRecord.EventInformation.InstanceId].Status; - promiseDetails.instances[historyRecord.EventInformation.InstanceId].fleetId = fleetId; - promiseDetails.instances[historyRecord.EventInformation.InstanceId].region = promiseDetails.fleets[fleetId].region; - promiseDetails.instances[historyRecord.EventInformation.InstanceId].startTime = 0; - promiseDetails.instances[historyRecord.EventInformation.InstanceId].endTime = new Date().getTime(); - } - - switch (historyRecord.EventInformation.EventSubType) { - case "launched": - promiseDetails.instances[historyRecord.EventInformation.InstanceId].startTime = new Date(historyRecord.Timestamp).getTime(); - break; - - case "terminated": - promiseDetails.instances[historyRecord.EventInformation.InstanceId].endTime = new Date(historyRecord.Timestamp).getTime(); - break; - } - - // Create a key based on region and instanceType, to track previously-requested combinations. - var spotKey = promiseDetails.fleets[fleetId].region + ":" + event.instanceType; - - // Skip remaining processing if it's already been requested. - if (promiseDetails.spotPrices.hasOwnProperty(spotKey)) { - return false; - } - - promiseDetails.spotPrices[spotKey] = {}; - var ec2 = new aws.EC2({region: promiseDetails.fleets[fleetId].region}); - spotPricePromises.push(ec2.describeSpotPriceHistory({ - InstanceTypes: [event.instanceType], - ProductDescriptions: ["Linux/UNIX (Amazon VPC)"], - // Default to retrieving the last two days' spot prices. - StartTime: (new Date().getTime() / 1000) - (60 * 60 * 48) - }).promise().then((data) => { - - data.SpotPriceHistory.forEach(function(spotHistoryItem) { - if (!promiseDetails.spotPrices[spotKey].hasOwnProperty(spotHistoryItem.AvailabilityZone)) { - promiseDetails.spotPrices[spotKey][spotHistoryItem.AvailabilityZone] = {}; - } - - var dateKey = new Date(spotHistoryItem.Timestamp).getTime(); - promiseDetails.spotPrices[spotKey][spotHistoryItem.AvailabilityZone][dateKey] = spotHistoryItem.SpotPrice; - }); - })); - }); - - if (promiseDetails.fleets[fleetId].SpotFleetRequestState.indexOf("cancelled") == 0) { - var fleetState = (promiseDetails.fleets[fleetId].SpotFleetRequestState == "cancelled") ? "COMPLETED" : "CANCELLING"; - - // Restructure the timestamps for event history - promiseDetails.fleets[fleetId].history.forEach(function(h) { - h.Timestamp = new Date(h.Timestamp).getTime() / 1000; - }); - - spotPricePromises.push(editCampaignViaRequestId(promiseDetails.fleets[fleetId].SpotFleetRequestId, { - active: false, - spotRequestHistory: promiseDetails.fleets[fleetId].history, - spotRequestStatus: promiseDetails.instanceStatuses[fleetId], - status: fleetState - }).then((data) => { - console.log("Marked campaign of " + promiseDetails.fleets[fleetId].SpotFleetRequestId + " as " + fleetState) - return "skip"; - }, (e) => { - console.log("[!] Failed attempting to update " + promiseDetails.fleets[fleetId].SpotFleetRequestId); - return "skip"; - }).then((data) => { - delete promiseDetails.fleets[fleetId]; - })); - - return false; - } - }); - - return Promise.all(spotPricePromises); - - }, (e) => { - console.log("fleetPromises failed.", e); - - promiseError = e; - return Promise.resolve(e); - }).then((spotPricePromises) => { - if (promiseError) { - return Promise.resolve("Skipping due to prior error."); - }; - - // Promises are all done. Let's calculate the instance costs, and roll them up to the fleet. - Object.keys(promiseDetails.instances).forEach(function(instanceId) { - var instance = promiseDetails.instances[instanceId]; - - if (!promiseDetails.fleets.hasOwnProperty(instance.fleetId)) { - console.log("Skipping orphaned instance [" + instanceId + "]"); - return false; - } - - var prices = promiseDetails.spotPrices[instance.region + ':' + instance.instanceType][instance.availabilityZone]; - prices[new Date().getTime()] = prices[Object.keys(prices).slice(-1)]; - - var timestamps = Object.keys(prices).sort(function(a, b) { return a - b; }); - - var accCost = 0; - var accSeconds = 0; - var duration = instance.endTime - instance.startTime; - var tempStartTime = instance.startTime; - - // console.log("duration: " + duration); - timestamps.forEach(function(e) { - // console.log("Checking against time: " + e) - if (e <= tempStartTime || accSeconds >= duration) { - return true; - } - - var ppms = prices[e] / 3600000; - var mseconds = e - tempStartTime; - - if (accSeconds + mseconds > duration) { - mseconds -= (accSeconds + mseconds - duration); - } - - accCost += (mseconds * ppms); - accSeconds += mseconds; - - // console.log("Costs: " + seconds + " seconds @ " + prices[e] + "/hr = " + (seconds * pps).toFixed(8)); - // console.log("Oldtime: " + tempStartTime + "; Newtime: " + (tempStartTime - seconds)); - - tempStartTime += mseconds; - }); - - console.log("Instance " + instanceId + " up for " + (accSeconds / 1000).toFixed(3) + " seconds; estimated cost $" + accCost.toFixed(4)); - promiseDetails.instances[instanceId].price = accCost; - promiseDetails.fleets[instance.fleetId].price += accCost; - - // var actualDuration = (new Date().getTime()) - (new Date(spotInstance.CreateTime).getTime()); - // console.log("^-- This should not exceed " + (actualDuration / 1000).toFixed(0)); - }); - - var finalPromises = []; - // Now review the fleets for those over their price limit. - Object.keys(promiseDetails.fleets).forEach(function(fleetId) { - var fleet = promiseDetails.fleets[fleetId]; - var tags = {}; - - fleet.SpotFleetRequestConfig.LaunchSpecifications[0].TagSpecifications.forEach(function(l) { - l.Tags.forEach(function(t) { - tags[t.Key] = t.Value; - }); - }); - - // Restructure the timestamps for event history - promiseDetails.fleets[fleetId].history.forEach(function(h) { - h.Timestamp = new Date(h.Timestamp).getTime() / 1000; - }); - - // Update the current price. - finalPromises.push(editCampaignViaRequestId(fleetId, { - active: true, - price: fleet.price, - spotRequestHistory: promiseDetails.fleets[fleetId].history, - spotRequestStatus: promiseDetails.instanceStatuses[fleetId], - status: "RUNNING" - }).then((data) => { - console.log("Updated price of " + fleetId); - }, (e) => { - console.log("[!] Failed attempting to update price for " + fleetId); - })); - - if (fleet.price > parseFloat(tags.MaxCost) || fleet.price > parseFloat(settings.campaign_max_price)) { - console.log("Fleet " + fleetId + " costs exceed limits; terminating."); - - finalPromises.push(ec2.cancelSpotFleetRequests({ - TerminateInstances: true, - SpotFleetRequestIds: [fleetId] - }).promise().then((data) => { - console.log("Cancelled " + fleetId); - return Promise.resolve(); - }, (e) => { - console.log(e); - return criticalAlert('Failed to terminate fleet ' + fleetId); - })); - } - - if (fleet.price > parseFloat(tags.MaxCost) * 1.1 || fleet.price > parseFloat(settings.campaign_max_price) * 1.1) { - console.log("Fleet " + fleetId + " costs CRITICALLY exceed limits (" + fleet.price + "); terminating and raising critical alert."); - finalPromises.push(critcalAlert("SFR " + fleetId + " current price is: " + fleet.price + "; Terminating.")); - - finalPromises.push(ec2.cancelSpotFleetRequests({ - TerminateInstances: true, - SpotFleetRequestIds: [fleetId] - }).promise().then((data) => { - console.log("Cancelled " + fleetId); - return Promise.resolve(); - }, (e) => { - return criticalAlert('Failed to terminate fleet ' + fleetId); - })); - } - }); - - return Promise.all(finalPromises); - - }, (e) => { - console.log("spotPricePromises failed.", e); - - promiseError = e; - return Promise.resolve(e) - }).then((spotPricePromises) => { - if (promiseError) { - return Promise.resolve("Skipping due to prior error."); - callback(promiseError); - }; - - console.log("Finished."); - callback(null, "Finished"); - - }, (e) => { - console.log("finalPromises failed.", e); - callback(e); - - promiseError = e; - return Promise.resolve(e) - }); -}; - -exports.main2 = function(event, context, callback) { - - cb = function(err, data) { - if (err) { - throw new Error (callback(err)); - process.exit(); - } - - console.log("Exiting: " + data); - - callback(null, data); - // process.exit(); - }; - - try { - evaluateAllSpotInstances(); - } catch (err) { - return cb("evaluateAllSpotInstances failed: " + err); - } -}; \ No newline at end of file diff --git a/terraform/lambda_functions/spot_monitor/package-lock.json b/terraform/lambda_functions/spot_monitor/package-lock.json deleted file mode 100644 index 48ca577..0000000 --- a/terraform/lambda_functions/spot_monitor/package-lock.json +++ /dev/null @@ -1,342 +0,0 @@ -{ - "name": "spot_monitor", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", - "requires": { - "@types/node": "*" - } - }, - "@types/continuation-local-storage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.2.tgz", - "integrity": "sha512-aItm+aYPJ4rT1cHmAxO+OdWjSviQ9iB5UKb5f0Uvgln0N4hS2mcDodHtPiqicYBXViUYhqyBjhA5uyOcT+S34Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", - "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz", - "integrity": "sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/mysql": { - "version": "2.15.8", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", - "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", - "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==" - }, - "@types/pg": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", - "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", - "requires": { - "@types/node": "*", - "@types/pg-types": "*" - } - }, - "@types/pg-types": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz", - "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - } - }, - "atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" - }, - "aws-sdk": { - "version": "2.599.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", - "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - } - }, - "aws-xray-sdk": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-2.5.0.tgz", - "integrity": "sha512-KBTF9QUq0zu24t+gFh3VATYDNx295VzZUUjpZ1OmIEbcs3Zqmox5L6VAqjCgGfJeLaCUAWPLkduxau3LuDpqcw==", - "requires": { - "aws-xray-sdk-core": "^2.5.0", - "aws-xray-sdk-express": "^2.5.0", - "aws-xray-sdk-mysql": "^2.5.0", - "aws-xray-sdk-postgres": "^2.5.0", - "pkginfo": "^0.4.0" - } - }, - "aws-xray-sdk-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-2.5.0.tgz", - "integrity": "sha512-qe60bv0kn5KY6gAIF88TPCOIdu/A3dTmcKISj+kE4OH02eF6kMm1ctL7OgoBAasnsDNSn0VMLhIaA1izgoWuxA==", - "requires": { - "@types/continuation-local-storage": "*", - "atomic-batcher": "^1.0.2", - "aws-sdk": "^2.304.0", - "continuation-local-storage": "^3.2.0", - "date-fns": "^1.29.0", - "pkginfo": "^0.4.0", - "semver": "^5.3.0", - "winston": "^2.4.4" - } - }, - "aws-xray-sdk-express": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-2.5.0.tgz", - "integrity": "sha512-VfUXlxFlI+gr6ImMF+3000fqPRTBS9MbAywdtC8dt/U57WQbLFDjPW+V6oJowTwrkgKwpOKSXncQDfBs8QHvIw==", - "requires": { - "@types/express": "*" - } - }, - "aws-xray-sdk-mysql": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-2.5.0.tgz", - "integrity": "sha512-OI3cDkVcKTiWytwoOE1Oj0D2UbchOVHkiQNXWktDk9QYzqbOz+GNEwD5QneqyxFu0z0bQieClBM+0okUprFBXQ==", - "requires": { - "@types/mysql": "*" - } - }, - "aws-xray-sdk-postgres": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-2.5.0.tgz", - "integrity": "sha512-8LcXTjr272gKMSg9a+QSGQPjAabQb87SA0c4ZlVcPqzoG7nAd3pULR6/HDtujeukbRAb6rEoxzKvPX0s18NyFw==", - "requires": { - "@types/pg": "*" - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, - "dynamodb-data-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", - "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=" - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } -} diff --git a/terraform/lambda_functions/status_reporter/package-lock.json b/terraform/lambda_functions/status_reporter/package-lock.json deleted file mode 100644 index bbae12d..0000000 --- a/terraform/lambda_functions/status_reporter/package-lock.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "status_reporter", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "aws-sdk": { - "version": "2.599.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.599.0.tgz", - "integrity": "sha512-7yTXnV5SC9W6m+STbziPd1ZNVh9fTtEZ7Mm0rMqEDm/B2fJBa5xd45TwWG8JvS40X5+9jUBykiWdCuVBBx82rg==", - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "dynamodb-data-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dynamodb-data-types/-/dynamodb-data-types-3.0.1.tgz", - "integrity": "sha1-VWhTFXTOLhkLwnzDpYlfvzeu/KU=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } -} diff --git a/terraform/lambda_functions/tester-spot_monitor.js b/terraform/lambda_functions/tester-spot_monitor.js deleted file mode 100644 index 7b6fb0d..0000000 --- a/terraform/lambda_functions/tester-spot_monitor.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -/* EXAMPLE EXECUTION (change 'npk' to your actual AWSCLI profile): -export AWS_ACCESS_KEY_ID=`aws configure get npkdirect.aws_access_key_id`; -export AWS_SECRET_ACCESS_KEY=`aws configure get npkdirect.aws_secret_access_key`; -node ./tester.js -*/ - -// Spot Monitor - -var handler = require("./spot_monitor/main"); - -var sim = {event: {}, context: {}}; - -handler.main(sim.event, sim.context, function(err, data) { - if (err) { - throw Error(err); - } else { - console.log(data); - } - - process.exit(0); -}); \ No newline at end of file diff --git a/terraform/lambda_functions/tester-status_reporter.js b/terraform/lambda_functions/tester-status_reporter.js deleted file mode 100644 index e0bc01d..0000000 --- a/terraform/lambda_functions/tester-status_reporter.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -/* EXAMPLE EXECUTION (change 'npk' to your actual AWSCLI profile): -export AWS_ACCESS_KEY_ID=`aws configure get npkdirect.aws_access_key_id`; -export AWS_SECRET_ACCESS_KEY=`aws configure get npkdirect.aws_secret_access_key`; -node ./tester.js -*/ - -// Spot Monitor - -var handler = require("./status_reporter/main"); - -var sim = {event: {}, context: {}}; - -// Performance -sim.event = JSON.parse('{"resource":"/statusreport/{proxy+}","path":"/v1/statusreport/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/performance","httpMethod":"POST","headers":{"Accept":"application/json","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"US","Content-Type":"application/json","Host":"api.dev.npkproject.io","User-Agent":"axios/0.18.0","Via":"1.1 2d845616bb025756fb00e75135987ac7.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"F5k_a6evS6I60PfYxlYTzT3MwBmwjI1ZuPIhs8E25v5aePYPDh_oFA==","x-amz-date":"20181225T073105Z","x-amz-security-token":"FQoGZXIvYXdzEMj//////////wEaDFZu80fZ2w5lZZ68EyK3Ax2qWWamqYb+lpkW2bonDGA0BZtaQmGAOQCwg7xwU7FIWLplZq4kkPCT31xV6z9VZ/rTqDsdwFu/+cECfTGzQj9RZwkonD044R5vM/mD0nq4ILzUuE/S33ZaKLfI8U42QVLfrUNRX1v9yYuOSvpfVZ4wwHhwaHhFHHGgucisCqBS7U9e5HqI6Oz+4ILldLukDFSycyiKhMuSlFOPGeIBZopcJIVCIeQ6LQExIw6Kbz49ctL2MJJj2Ew0w/xZeJkumU8NQMx6Nwvj0DPR3zBVMNnGqGdXmwgQORINje6n/3iE2EneFGkDAJlREKnModwxwXuJ9s9LaX/H942DCrzq6C36AEVpsLKrwVv2FCfj09fNU2KIY+iT0SDOWRTunH+lN52N/vghHDTginDpprcgwOzSjFnhkVfmPfViqFPqOPavL4I5LBTcOW3hUiDu0VZ5N04aqpq/JwpvxC+febK89AsabNyR7WFtbGxiLO+h81pKpqSWcv+sUewlWNWmsRjODC/8y4tbtqy8X6gI1G8Z6bI4niWKYmOmYt846KoJjDEsNKt9t3tonlSsS6T9rpH0HMDysTsonwcoiaaH4QU=","X-Amzn-Trace-Id":"Root=1-5c21dcb9-29301160d0ba84a98728f1d6","X-Forwarded-For":"54.213.33.212, 52.46.16.78","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["application/json"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["US"],"Content-Type":["application/json"],"Host":["api.dev.npkproject.io"],"User-Agent":["axios/0.18.0"],"Via":["1.1 2d845616bb025756fb00e75135987ac7.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["F5k_a6evS6I60PfYxlYTzT3MwBmwjI1ZuPIhs8E25v5aePYPDh_oFA=="],"x-amz-date":["20181225T073105Z"],"x-amz-security-token":["FQoGZXIvYXdzEMj//////////wEaDFZu80fZ2w5lZZ68EyK3Ax2qWWamqYb+lpkW2bonDGA0BZtaQmGAOQCwg7xwU7FIWLplZq4kkPCT31xV6z9VZ/rTqDsdwFu/+cECfTGzQj9RZwkonD044R5vM/mD0nq4ILzUuE/S33ZaKLfI8U42QVLfrUNRX1v9yYuOSvpfVZ4wwHhwaHhFHHGgucisCqBS7U9e5HqI6Oz+4ILldLukDFSycyiKhMuSlFOPGeIBZopcJIVCIeQ6LQExIw6Kbz49ctL2MJJj2Ew0w/xZeJkumU8NQMx6Nwvj0DPR3zBVMNnGqGdXmwgQORINje6n/3iE2EneFGkDAJlREKnModwxwXuJ9s9LaX/H942DCrzq6C36AEVpsLKrwVv2FCfj09fNU2KIY+iT0SDOWRTunH+lN52N/vghHDTginDpprcgwOzSjFnhkVfmPfViqFPqOPavL4I5LBTcOW3hUiDu0VZ5N04aqpq/JwpvxC+febK89AsabNyR7WFtbGxiLO+h81pKpqSWcv+sUewlWNWmsRjODC/8y4tbtqy8X6gI1G8Z6bI4niWKYmOmYt846KoJjDEsNKt9t3tonlSsS6T9rpH0HMDysTsonwcoiaaH4QU="],"X-Amzn-Trace-Id":["Root=1-5c21dcb9-29301160d0ba84a98728f1d6"],"X-Forwarded-For":["54.213.33.212, 52.46.16.78"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":{"proxy":"us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/performance"},"stageVariables":null,"requestContext":{"resourceId":"6d67ba","resourcePath":"/statusreport/{proxy+}","httpMethod":"POST","extendedRequestId":"Sc9s-GuuPHcFzBg=","requestTime":"25/Dec/2018:07:31:05 +0000","path":"/v1/statusreport/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/performance","accountId":"892205115566","protocol":"HTTP/1.1","stage":"v1","domainPrefix":"api","requestTimeEpoch":1545723065494,"requestId":"09e73d36-0817-11e9-92c8-913fd5e8892e","identity":{"cognitoIdentityPoolId":null,"accountId":"892205115566","cognitoIdentityId":null,"caller":"AROAIWQI2CSQVPUSEYVOM:i-00f33a7486b893101","sourceIp":"54.213.33.212","accessKey":"ASIA47O4RVCXJPXDXVWE","cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":"arn:aws:sts::892205115566:assumed-role/npk_instance_role_20181215023244879000000001/i-00f33a7486b893101","userAgent":"axios/0.18.0","user":"AROAIWQI2CSQVPUSEYVOM:i-00f33a7486b893101"},"domainName":"api.dev.npkproject.io","apiId":"eg8uhhcgg9"},"body":"","isBase64Encoded":false}'); -sim.event.body = '{"startTime":"1543173536","estimatedEndTime":"1543173624","hashRate":8219100000,"progress":"8.764857","recoveredHashes":"0","recoveredPercentage":"0.000000","rejectedPercentage":"0.000000","performance":{"0":8219100000}}'; - - -/* Node -sim.event = JSON.parse('{"resource":"/statusreport/{proxy+}","path":"/v1/statusreport/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/node","httpMethod":"POST","headers":{"Accept":"application/json","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"US","Content-Type":"application/json","Host":"api.dev.npkproject.io","User-Agent":"axios/0.18.0","Via":"1.1 2d845616bb025756fb00e75135987ac7.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"F5k_a6evS6I60PfYxlYTzT3MwBmwjI1ZuPIhs8E25v5aePYPDh_oFA==","x-amz-date":"20181225T073105Z","x-amz-security-token":"FQoGZXIvYXdzEMj//////////wEaDFZu80fZ2w5lZZ68EyK3Ax2qWWamqYb+lpkW2bonDGA0BZtaQmGAOQCwg7xwU7FIWLplZq4kkPCT31xV6z9VZ/rTqDsdwFu/+cECfTGzQj9RZwkonD044R5vM/mD0nq4ILzUuE/S33ZaKLfI8U42QVLfrUNRX1v9yYuOSvpfVZ4wwHhwaHhFHHGgucisCqBS7U9e5HqI6Oz+4ILldLukDFSycyiKhMuSlFOPGeIBZopcJIVCIeQ6LQExIw6Kbz49ctL2MJJj2Ew0w/xZeJkumU8NQMx6Nwvj0DPR3zBVMNnGqGdXmwgQORINje6n/3iE2EneFGkDAJlREKnModwxwXuJ9s9LaX/H942DCrzq6C36AEVpsLKrwVv2FCfj09fNU2KIY+iT0SDOWRTunH+lN52N/vghHDTginDpprcgwOzSjFnhkVfmPfViqFPqOPavL4I5LBTcOW3hUiDu0VZ5N04aqpq/JwpvxC+febK89AsabNyR7WFtbGxiLO+h81pKpqSWcv+sUewlWNWmsRjODC/8y4tbtqy8X6gI1G8Z6bI4niWKYmOmYt846KoJjDEsNKt9t3tonlSsS6T9rpH0HMDysTsonwcoiaaH4QU=","X-Amzn-Trace-Id":"Root=1-5c21dcb9-29301160d0ba84a98728f1d6","X-Forwarded-For":"54.213.33.212, 52.46.16.78","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["application/json"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["US"],"Content-Type":["application/json"],"Host":["api.dev.npkproject.io"],"User-Agent":["axios/0.18.0"],"Via":["1.1 2d845616bb025756fb00e75135987ac7.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["F5k_a6evS6I60PfYxlYTzT3MwBmwjI1ZuPIhs8E25v5aePYPDh_oFA=="],"x-amz-date":["20181225T073105Z"],"x-amz-security-token":["FQoGZXIvYXdzEMj//////////wEaDFZu80fZ2w5lZZ68EyK3Ax2qWWamqYb+lpkW2bonDGA0BZtaQmGAOQCwg7xwU7FIWLplZq4kkPCT31xV6z9VZ/rTqDsdwFu/+cECfTGzQj9RZwkonD044R5vM/mD0nq4ILzUuE/S33ZaKLfI8U42QVLfrUNRX1v9yYuOSvpfVZ4wwHhwaHhFHHGgucisCqBS7U9e5HqI6Oz+4ILldLukDFSycyiKhMuSlFOPGeIBZopcJIVCIeQ6LQExIw6Kbz49ctL2MJJj2Ew0w/xZeJkumU8NQMx6Nwvj0DPR3zBVMNnGqGdXmwgQORINje6n/3iE2EneFGkDAJlREKnModwxwXuJ9s9LaX/H942DCrzq6C36AEVpsLKrwVv2FCfj09fNU2KIY+iT0SDOWRTunH+lN52N/vghHDTginDpprcgwOzSjFnhkVfmPfViqFPqOPavL4I5LBTcOW3hUiDu0VZ5N04aqpq/JwpvxC+febK89AsabNyR7WFtbGxiLO+h81pKpqSWcv+sUewlWNWmsRjODC/8y4tbtqy8X6gI1G8Z6bI4niWKYmOmYt846KoJjDEsNKt9t3tonlSsS6T9rpH0HMDysTsonwcoiaaH4QU="],"X-Amzn-Trace-Id":["Root=1-5c21dcb9-29301160d0ba84a98728f1d6"],"X-Forwarded-For":["54.213.33.212, 52.46.16.78"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":{"proxy":"us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/node"},"stageVariables":null,"requestContext":{"resourceId":"6d67ba","resourcePath":"/statusreport/{proxy+}","httpMethod":"POST","extendedRequestId":"Sc9s-GuuPHcFzBg=","requestTime":"25/Dec/2018:07:31:05 +0000","path":"/v1/statusreport/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/9c3ac117-ea93-4884-8e22-67cbece8dc89/i-00f33a7486b893101/node","accountId":"892205115566","protocol":"HTTP/1.1","stage":"v1","domainPrefix":"api","requestTimeEpoch":1545723065494,"requestId":"09e73d36-0817-11e9-92c8-913fd5e8892e","identity":{"cognitoIdentityPoolId":null,"accountId":"892205115566","cognitoIdentityId":null,"caller":"AROAIWQI2CSQVPUSEYVOM:i-00f33a7486b893101","sourceIp":"54.213.33.212","accessKey":"ASIA47O4RVCXJPXDXVWE","cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":"arn:aws:sts::892205115566:assumed-role/npk_instance_role_20181215023244879000000001/i-00f33a7486b893101","userAgent":"axios/0.18.0","user":"AROAIWQI2CSQVPUSEYVOM:i-00f33a7486b893101"},"domainName":"api.dev.npkproject.io","apiId":"eg8uhhcgg9"},"body":"","isBase64Encoded":false}'); -sim.event.body = '{}'; -*/ - -handler.main(sim.event, sim.context, function(err, data) { - if (err) { - throw Error(err); - } else { - console.log(data); - } - - process.exit(0); -}); \ No newline at end of file diff --git a/terraform/lambda_functions/tester.js b/terraform/lambda_functions/tester.js deleted file mode 100644 index dfeb18b..0000000 --- a/terraform/lambda_functions/tester.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; - -/* EXAMPLE EXECUTION (change 'npk' to your actual AWSCLI profile): -export AWS_ACCESS_KEY_ID=`aws configure get npkdirect.aws_access_key_id`; -export AWS_SECRET_ACCESS_KEY=`aws configure get npkdirect.aws_secret_access_key`; -node ./tester.js -*/ - - -/* Proxy API Handler */ -var handler = require("./proxy_api_handler/main"); - -//POST Campaign -var sim = JSON.parse('{"event":{"resource":"/userproxy/{proxy+}","path":"/v1/userproxy/campaign","httpMethod":"POST","headers":{"Accept":"application/json","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"US","content-type":"application/x-www-form-urlencoded","Host":"api.dev.npkproject.io","origin":"http://localhost","Referer":"http://localhost/","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36","Via":"2.0 e272b56ab8dd1450f3dbafeb0f3671a9.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"A9nXiHbOExyXOHnl-2N835ZYT4ZjkqXR1VKG3ywoza4idIzSRYI9cQ==","x-amz-date":"20181127T065656Z","x-amz-security-token":"AgoGb3JpZ2luEGoaCXVzLXdlc3QtMiKAAiB2t14FBMR0I4whJsH6Q1cWYc8KC7wko545FycoqmJVYCjioNqivA8lUqPomr0cs38+xfXX+h3ITtM/B8Qeeepya+AHYTDq620E+tHjinBxW5RIRqbGB5mEYfKcLCCVl0bSE5ABdTpiScOr2YqW/aHy7dV+NDKvWZNyoltsgAcCjQKWitO6x23bpT+Qf8N9eCNkBomeY7Ad04E+wc1DHMEnhY7c0z2QO6pbSJY/tXuKFJCU5+W8QSp9lycBEuH3MkOSOQYsijMs0+cWiNbTzRLH4t+edVwdkf0EZFYM8Ewe/xCkyLeqTjTPn6lgFswgD/yrmOMVto75DHorz96IS7cqpgUIEBAAGgw4OTIyMDUxMTU1NjYiDM42Ra/uQcFVILls9iqDBSMnTsq1gqe161mvylCCoA1LvUC9eqAu4QbgUazOdCsj6Zh5MDwP6DdhGKEd3FPhJjTU8S1/J3FKbvJfVzSAgdx9WBK8F99iRtvAeMQT9MJab20dbYeEFT4+g3OAogXuKC92fC4EwmmpkY5KTbx9xrXDXxeXwGUgOk7uZEQX7iXsC6a09GgTTLL+UvxUy/M8Py4o1H02sBFwPgOyZ5yRfz4gHByqjWzBOkJihL6qoZAtVjS8s4wmn7sC5T1ckFMXe8TF18s8Upjm/O1npJYMJZ2OkG2n4Cx7GBGoYLSDW0hsarqyAPNGHq8mo3oWw9uysgjklZuFCRqOAEBm41NxXW64VrB3BKQHxnD/uyLqV/HfkAqzIYryTiOzqp8qL2JxkdexHM+cb2i0C2gK4D9/fEs8Jj3n8/HvtNCEVcLq/JXo2lcXmduKZq0i5TfwmSePGMorScReZZ0bj/55vbEp5QtVu8YoPJpxR6Cb5rzGAp/7D0t8lufv1xlJsj0P9ygbOkfYAQDkrlrtMkdjuf/3vK1BbrJl5ypt4cjb0E3BKlmlw5BwGkOIdvnpRkfJido1stvWv2SfKtke7909Zyi5wyYaEtzcl66a0/D8U6uV3klo7VBbjptJ3MpgIv7dYoAwReSGurJ3Ih6C4jMpdlbDABn0w267wfLdebk9zrSvigqzmZQTD2/MHiR8GKU49RMr0o2o8Sr0nq/6Lw5ITf7qKBDRB2OM1FfBl8y+NpWeeuooRcjnZvKDUO/PzeGV6EGrKw03dgoEerj70pyMaU0z+2c9mTnMSetTS7IYqn6hLZ0Pyjlut7Rs9yXu932H0prVCRUhIPEWO9oLHpf2NtULaDExaTUw/czz3wU=","X-Amzn-Trace-Id":"Root=1-5bfceab8-8d8ecd80bb833f18e5bfeaa8","X-Forwarded-For":"50.194.54.222, 52.46.17.6","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["application/json"],"Accept-Encoding":["gzip, deflate, br"],"Accept-Language":["en-US,en;q=0.9"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["US"],"content-type":["application/x-www-form-urlencoded"],"Host":["api.dev.npkproject.io"],"origin":["http://localhost"],"Referer":["http://localhost/"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"],"Via":["2.0 e272b56ab8dd1450f3dbafeb0f3671a9.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["A9nXiHbOExyXOHnl-2N835ZYT4ZjkqXR1VKG3ywoza4idIzSRYI9cQ=="],"x-amz-date":["20181127T065656Z"],"x-amz-security-token":["AgoGb3JpZ2luEGoaCXVzLXdlc3QtMiKAAiB2t14FBMR0I4whJsH6Q1cWYc8KC7wko545FycoqmJVYCjioNqivA8lUqPomr0cs38+xfXX+h3ITtM/B8Qeeepya+AHYTDq620E+tHjinBxW5RIRqbGB5mEYfKcLCCVl0bSE5ABdTpiScOr2YqW/aHy7dV+NDKvWZNyoltsgAcCjQKWitO6x23bpT+Qf8N9eCNkBomeY7Ad04E+wc1DHMEnhY7c0z2QO6pbSJY/tXuKFJCU5+W8QSp9lycBEuH3MkOSOQYsijMs0+cWiNbTzRLH4t+edVwdkf0EZFYM8Ewe/xCkyLeqTjTPn6lgFswgD/yrmOMVto75DHorz96IS7cqpgUIEBAAGgw4OTIyMDUxMTU1NjYiDM42Ra/uQcFVILls9iqDBSMnTsq1gqe161mvylCCoA1LvUC9eqAu4QbgUazOdCsj6Zh5MDwP6DdhGKEd3FPhJjTU8S1/J3FKbvJfVzSAgdx9WBK8F99iRtvAeMQT9MJab20dbYeEFT4+g3OAogXuKC92fC4EwmmpkY5KTbx9xrXDXxeXwGUgOk7uZEQX7iXsC6a09GgTTLL+UvxUy/M8Py4o1H02sBFwPgOyZ5yRfz4gHByqjWzBOkJihL6qoZAtVjS8s4wmn7sC5T1ckFMXe8TF18s8Upjm/O1npJYMJZ2OkG2n4Cx7GBGoYLSDW0hsarqyAPNGHq8mo3oWw9uysgjklZuFCRqOAEBm41NxXW64VrB3BKQHxnD/uyLqV/HfkAqzIYryTiOzqp8qL2JxkdexHM+cb2i0C2gK4D9/fEs8Jj3n8/HvtNCEVcLq/JXo2lcXmduKZq0i5TfwmSePGMorScReZZ0bj/55vbEp5QtVu8YoPJpxR6Cb5rzGAp/7D0t8lufv1xlJsj0P9ygbOkfYAQDkrlrtMkdjuf/3vK1BbrJl5ypt4cjb0E3BKlmlw5BwGkOIdvnpRkfJido1stvWv2SfKtke7909Zyi5wyYaEtzcl66a0/D8U6uV3klo7VBbjptJ3MpgIv7dYoAwReSGurJ3Ih6C4jMpdlbDABn0w267wfLdebk9zrSvigqzmZQTD2/MHiR8GKU49RMr0o2o8Sr0nq/6Lw5ITf7qKBDRB2OM1FfBl8y+NpWeeuooRcjnZvKDUO/PzeGV6EGrKw03dgoEerj70pyMaU0z+2c9mTnMSetTS7IYqn6hLZ0Pyjlut7Rs9yXu932H0prVCRUhIPEWO9oLHpf2NtULaDExaTUw/czz3wU="],"X-Amzn-Trace-Id":["Root=1-5bfceab8-8d8ecd80bb833f18e5bfeaa8"],"X-Forwarded-For":["50.194.54.222, 52.46.17.6"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":{"proxy":"campaign"},"stageVariables":null,"requestContext":{"resourceId":"21tcvc","resourcePath":"/userproxy/{proxy+}","httpMethod":"POST","extendedRequestId":"RAmc1Hl1PHcFToA=","requestTime":"27/Nov/2018:06:56:56 +0000","path":"/v1/userproxy/campaign","accountId":"892205115566","protocol":"HTTP/1.1","stage":"v1","domainPrefix":"api","requestTimeEpoch":1543301816514,"requestId":"a10cda32-f211-11e8-a003-1d4c6934ba7d","identity":{"cognitoIdentityPoolId":"us-west-2:804f962c-dbf0-4cb3-89d8-799110696b31","accountId":"892205115566","cognitoIdentityId":"us-west-2:b8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743","caller":"AROAJ555JTA7CRPEFMDXE:CognitoIdentityCredentials","sourceIp":"50.194.54.222","accessKey":"ASIA47O4RVCXAYQ2HOG3","cognitoAuthenticationType":"authenticated","cognitoAuthenticationProvider":"cognito-idp.us-west-2.amazonaws.com/us-west-2_ZokBjJS8x,cognito-idp.us-west-2.amazonaws.com/us-west-2_ZokBjJS8x:CognitoSignIn:dff6dfea-45eb-4870-b697-cdcfc05692ec","userArn":"arn:aws:sts::892205115566:assumed-role/cognito_authenticated_role_20181005031702531300000001/CognitoIdentityCredentials","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36","user":"AROAJ555JTA7CRPEFMDXE:CognitoIdentityCredentials"},"domainName":"api.dev.npkproject.io","apiId":"eg8uhhcgg9"},"body":"test","isBase64Encoded":false},"context":{"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/proxy_api_handler","logStreamName":"2018/11/27/[$LATEST]72b8e7cc291c40f59a0ad1d9890931a6","functionName":"proxy_api_handler","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":"a10f9997-f211-11e8-a029-91d9e4a3a1af","awsRequestId":"a10f9997-f211-11e8-a029-91d9e4a3a1af","invokedFunctionArn":"arn:aws:lambda:us-west-2:892205115566:function:proxy_api_handler"},"success":true}'); -sim.event.body = JSON.parse('{"region":"us-west-2","availabilityZone":"us-west-2c","instanceType":"p2.xlarge","hashFile":"uploads/md5sums","hashFileUrl":"","instanceCount":"1","instanceDuration":"6","priceTarget":1.35,"mask":"?a","dictionaryFile":"wordlist/rockyou.7z","rulesFiles":["rules/d3ad0ne.rule.7z"]}'); -sim.event.body.hashFileUrl = "https://npk-user-data-20181002224350176600000001.s3.us-west-2.amazonaws.com/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/uploads/md5sums?AWSAccessKeyId=ASIA47O4RVCXPIAF3R67&Expires=1545767657&Signature=cnrZBLtAcQjtGLtH9o%2BGvyvb8Ns%3D&x-amz-security-token=AgoGb3JpZ2luEBYaCXVzLXdlc3QtMiKAApRSKbWl8CUinrcpIYI6QKd1gvdVZdrHOWkjnzW9au%2ByViHpMsArv4tcNlS4v4mvobQXa4KmlLhWAtklzrQ5NHQd%2BeOJS3KKzYETAYOMQJb7%2BtdnJA%2B%2BwBdqiyXwVQ10NSK1yOWpBg8TQPxcS4NaImIFDiqJPYa1w92aypX%2BV4204LWyMOw6YXizh9u7z%2BmT%2Fc6MWKamhgO8pzvhoL2PD%2BudLQ1RI1zRtZJ2hwDJv3MgV19Q5QWQt%2BTIpZxx6%2Fov0MfM21iTIlrYrK8VD%2BW800Vk08qo2dirtTn5Vk78hFzSuy5N4xPflketVazh3LnO4aSS8WgnIm6eDhu7jQ7Ssu0qrwUI2%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw4OTIyMDUxMTU1NjYiDBJPVbYJwM0WONnMpCqDBSFxOaz44Jn%2FvbOGt4bxFLx9ccApyeORFqXgiQfDIS2NYPvmhqfm3d7zMTUzbbt483ogSefA09VEJaNbW5hBvSsbqC%2FUCW6%2FuuWCT2ofzukbLGAAQF3Xh665iUCziGY30G6Gmdtl41028TVBYS%2FIlgwzZVQjkLvGbnAgoBEtNZe9cmEthuCRAj0ZtV8twYk2ngnYyFYSoMuhxbYSC9ReQ6147t2wvH8yWS%2FDCxcxcFvu8Ztg40zKa9R5faSdv0zaHGBBG4Dp6XduTTlQY1LFwauFzMFOEBgantVGKILTYUkfb4oIPnhei8ebUEDXO9DPyzoQrT7n%2FHFYypRXCuZ9oIWsOR8XgGPM66qxbdt1cGq0smeQn8ZapA5llC0M9p%2FO7eUhorL3MjOKOkRFVF1cXFIBxUR3aFmvCSddO1iKUyStN5%2B4pVS%2F1kLYH8IRnHM2aHfo3AXCF5BFmH9Q1ZzVggGuGlnoKPtUqx8JKzYcfYtQC0R5cYqY3RsHmPB9f3b4EWetDeGMwDc%2Ft5kb8UDUieZIO8RHIYfGR7mwPiP4OZh1Hv3BbCQZDPhfnWZkWHeG5u686YxUygzaQnWoBsu9Zh9rWXUm%2FTRbNdqE%2Ff0ZJ2nmY3hXNfRh8Po0VgBRq1blxOQup4KfKN6ce2W2mtVLuGBGZQWku7U70Y073vPr0lsBOxkZVeZ0wahjJb538fBjNETYoZbVpzZchFrYK1iW8LehhYkI7ojM%2BHm%2BLCPlC%2B5rE8BQE%2Bhh9T6yofXHXfCBVRUsWTI5EVW2%2BCMrLCjrYKrwUu5KxTzOQb8ftp%2BbZWephgUvY4yjALWzD85PHzw3SeZEwRHhp1AzKuZRrbD%2F7CFF%2BMYwzuGJ4QU%3D"; -sim.event.body = JSON.stringify(sim.event.body); - -console.log(JSON.stringify(sim.event)); -// DELETE Campaign -// var sim = JSON.parse('{"event":{"resource":"/userproxy/{proxy+}","path":"/v1/userproxy/campaign/12344","httpMethod":"DELETE","headers":{"Accept":"application/json","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"US","content-type":"application/x-www-form-urlencoded","Host":"api.dev.npkproject.io","origin":"http://localhost","Referer":"http://localhost/","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36","Via":"2.0 e272b56ab8dd1450f3dbafeb0f3671a9.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"A9nXiHbOExyXOHnl-2N835ZYT4ZjkqXR1VKG3ywoza4idIzSRYI9cQ==","x-amz-date":"20181127T065656Z","x-amz-security-token":"AgoGb3JpZ2luEGoaCXVzLXdlc3QtMiKAAiB2t14FBMR0I4whJsH6Q1cWYc8KC7wko545FycoqmJVYCjioNqivA8lUqPomr0cs38+xfXX+h3ITtM/B8Qeeepya+AHYTDq620E+tHjinBxW5RIRqbGB5mEYfKcLCCVl0bSE5ABdTpiScOr2YqW/aHy7dV+NDKvWZNyoltsgAcCjQKWitO6x23bpT+Qf8N9eCNkBomeY7Ad04E+wc1DHMEnhY7c0z2QO6pbSJY/tXuKFJCU5+W8QSp9lycBEuH3MkOSOQYsijMs0+cWiNbTzRLH4t+edVwdkf0EZFYM8Ewe/xCkyLeqTjTPn6lgFswgD/yrmOMVto75DHorz96IS7cqpgUIEBAAGgw4OTIyMDUxMTU1NjYiDM42Ra/uQcFVILls9iqDBSMnTsq1gqe161mvylCCoA1LvUC9eqAu4QbgUazOdCsj6Zh5MDwP6DdhGKEd3FPhJjTU8S1/J3FKbvJfVzSAgdx9WBK8F99iRtvAeMQT9MJab20dbYeEFT4+g3OAogXuKC92fC4EwmmpkY5KTbx9xrXDXxeXwGUgOk7uZEQX7iXsC6a09GgTTLL+UvxUy/M8Py4o1H02sBFwPgOyZ5yRfz4gHByqjWzBOkJihL6qoZAtVjS8s4wmn7sC5T1ckFMXe8TF18s8Upjm/O1npJYMJZ2OkG2n4Cx7GBGoYLSDW0hsarqyAPNGHq8mo3oWw9uysgjklZuFCRqOAEBm41NxXW64VrB3BKQHxnD/uyLqV/HfkAqzIYryTiOzqp8qL2JxkdexHM+cb2i0C2gK4D9/fEs8Jj3n8/HvtNCEVcLq/JXo2lcXmduKZq0i5TfwmSePGMorScReZZ0bj/55vbEp5QtVu8YoPJpxR6Cb5rzGAp/7D0t8lufv1xlJsj0P9ygbOkfYAQDkrlrtMkdjuf/3vK1BbrJl5ypt4cjb0E3BKlmlw5BwGkOIdvnpRkfJido1stvWv2SfKtke7909Zyi5wyYaEtzcl66a0/D8U6uV3klo7VBbjptJ3MpgIv7dYoAwReSGurJ3Ih6C4jMpdlbDABn0w267wfLdebk9zrSvigqzmZQTD2/MHiR8GKU49RMr0o2o8Sr0nq/6Lw5ITf7qKBDRB2OM1FfBl8y+NpWeeuooRcjnZvKDUO/PzeGV6EGrKw03dgoEerj70pyMaU0z+2c9mTnMSetTS7IYqn6hLZ0Pyjlut7Rs9yXu932H0prVCRUhIPEWO9oLHpf2NtULaDExaTUw/czz3wU=","X-Amzn-Trace-Id":"Root=1-5bfceab8-8d8ecd80bb833f18e5bfeaa8","X-Forwarded-For":"50.194.54.222, 52.46.17.6","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["application/json"],"Accept-Encoding":["gzip, deflate, br"],"Accept-Language":["en-US,en;q=0.9"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["US"],"content-type":["application/x-www-form-urlencoded"],"Host":["api.dev.npkproject.io"],"origin":["http://localhost"],"Referer":["http://localhost/"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"],"Via":["2.0 e272b56ab8dd1450f3dbafeb0f3671a9.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["A9nXiHbOExyXOHnl-2N835ZYT4ZjkqXR1VKG3ywoza4idIzSRYI9cQ=="],"x-amz-date":["20181127T065656Z"],"x-amz-security-token":["AgoGb3JpZ2luEGoaCXVzLXdlc3QtMiKAAiB2t14FBMR0I4whJsH6Q1cWYc8KC7wko545FycoqmJVYCjioNqivA8lUqPomr0cs38+xfXX+h3ITtM/B8Qeeepya+AHYTDq620E+tHjinBxW5RIRqbGB5mEYfKcLCCVl0bSE5ABdTpiScOr2YqW/aHy7dV+NDKvWZNyoltsgAcCjQKWitO6x23bpT+Qf8N9eCNkBomeY7Ad04E+wc1DHMEnhY7c0z2QO6pbSJY/tXuKFJCU5+W8QSp9lycBEuH3MkOSOQYsijMs0+cWiNbTzRLH4t+edVwdkf0EZFYM8Ewe/xCkyLeqTjTPn6lgFswgD/yrmOMVto75DHorz96IS7cqpgUIEBAAGgw4OTIyMDUxMTU1NjYiDM42Ra/uQcFVILls9iqDBSMnTsq1gqe161mvylCCoA1LvUC9eqAu4QbgUazOdCsj6Zh5MDwP6DdhGKEd3FPhJjTU8S1/J3FKbvJfVzSAgdx9WBK8F99iRtvAeMQT9MJab20dbYeEFT4+g3OAogXuKC92fC4EwmmpkY5KTbx9xrXDXxeXwGUgOk7uZEQX7iXsC6a09GgTTLL+UvxUy/M8Py4o1H02sBFwPgOyZ5yRfz4gHByqjWzBOkJihL6qoZAtVjS8s4wmn7sC5T1ckFMXe8TF18s8Upjm/O1npJYMJZ2OkG2n4Cx7GBGoYLSDW0hsarqyAPNGHq8mo3oWw9uysgjklZuFCRqOAEBm41NxXW64VrB3BKQHxnD/uyLqV/HfkAqzIYryTiOzqp8qL2JxkdexHM+cb2i0C2gK4D9/fEs8Jj3n8/HvtNCEVcLq/JXo2lcXmduKZq0i5TfwmSePGMorScReZZ0bj/55vbEp5QtVu8YoPJpxR6Cb5rzGAp/7D0t8lufv1xlJsj0P9ygbOkfYAQDkrlrtMkdjuf/3vK1BbrJl5ypt4cjb0E3BKlmlw5BwGkOIdvnpRkfJido1stvWv2SfKtke7909Zyi5wyYaEtzcl66a0/D8U6uV3klo7VBbjptJ3MpgIv7dYoAwReSGurJ3Ih6C4jMpdlbDABn0w267wfLdebk9zrSvigqzmZQTD2/MHiR8GKU49RMr0o2o8Sr0nq/6Lw5ITf7qKBDRB2OM1FfBl8y+NpWeeuooRcjnZvKDUO/PzeGV6EGrKw03dgoEerj70pyMaU0z+2c9mTnMSetTS7IYqn6hLZ0Pyjlut7Rs9yXu932H0prVCRUhIPEWO9oLHpf2NtULaDExaTUw/czz3wU="],"X-Amzn-Trace-Id":["Root=1-5bfceab8-8d8ecd80bb833f18e5bfeaa8"],"X-Forwarded-For":["50.194.54.222, 52.46.17.6"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":{"proxy":"campaign/12344"},"stageVariables":null,"requestContext":{"resourceId":"21tcvc","resourcePath":"/userproxy/{proxy+}","httpMethod":"DELETE","extendedRequestId":"RAmc1Hl1PHcFToA=","requestTime":"27/Nov/2018:06:56:56 +0000","path":"/v1/userproxy/campaign/12344","accountId":"892205115566","protocol":"HTTP/1.1","stage":"v1","domainPrefix":"api","requestTimeEpoch":1543301816514,"requestId":"a10cda32-f211-11e8-a003-1d4c6934ba7d","identity":{"cognitoIdentityPoolId":"us-west-2:804f962c-dbf0-4cb3-89d8-799110696b31","accountId":"892205115566","cognitoIdentityId":"us-west-2:b8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743","caller":"AROAJ555JTA7CRPEFMDXE:CognitoIdentityCredentials","sourceIp":"50.194.54.222","accessKey":"ASIA47O4RVCXAYQ2HOG3","cognitoAuthenticationType":"authenticated","cognitoAuthenticationProvider":"cognito-idp.us-west-2.amazonaws.com/us-west-2_ZokBjJS8x,cognito-idp.us-west-2.amazonaws.com/us-west-2_ZokBjJS8x:CognitoSignIn:dff6dfea-45eb-4870-b697-cdcfc05692ec","userArn":"arn:aws:sts::892205115566:assumed-role/cognito_authenticated_role_20181005031702531300000001/CognitoIdentityCredentials","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36","user":"AROAJ555JTA7CRPEFMDXE:CognitoIdentityCredentials"},"domainName":"api.dev.npkproject.io","apiId":"eg8uhhcgg9"},"body":"test","isBase64Encoded":false},"context":{"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/proxy_api_handler","logStreamName":"2018/11/27/[$LATEST]72b8e7cc291c40f59a0ad1d9890931a6","functionName":"proxy_api_handler","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":"a10f9997-f211-11e8-a029-91d9e4a3a1af","awsRequestId":"a10f9997-f211-11e8-a029-91d9e4a3a1af","invokedFunctionArn":"arn:aws:lambda:us-west-2:892205115566:function:proxy_api_handler"},"success":true}'); - - -/* -sim.event.body = { - "region": "us-west-2", - "availabilityZone": "us-west-2c", - "instanceType": "p2.xlarge", - "hashFile": "uploads/md5sums", - "instanceCount": "3", - "instanceDuration": "9", - "priceTarget": 198.288, - "mask": "?a?a?d", - "dictionaryFile": "wordlist/rockyou.7z", - "rulesFiles": [ - "rules/d3ad0ne.rule.7z" - ], - "campaignId": 0, - "cognitoIdentityId": 0, - "spotFleetRequestId": "sfr-57485354-b918-4697-a746-013141f9f2d5" -}; -*/ - -//sim.event.body = JSON.parse('{"region":"us-west-2","availabilityZone":"us-west-2c","instanceType":"p3.16xlarge","hashFile":"uploads/md5sums","hashFileUrl":"https://npk-user-data-20181002224350176600000001.s3.us-west-2.amazonaws.com/us-west-2%3Ab8eb71dd-3fe2-44ae-bfa2-0d0ab3a22743/uploads/md5sums?AWSAccessKeyId=ASIA47O4RVCXPG2VBIMN&Expires=1544922993&Signature=XGGbQw%2Bj%2B2n82eFJlqJ%2B6rlk%2Boc%3D&x-amz-security-token=AgoGb3JpZ2luECwaCXVzLXdlc3QtMiKAAnzVMIhDuHQ8vNAIpRH8wy%2Fd3%2BtNMUCUQQnN%2BJTVQmsxkmTFXXNtGfY24dp6B0dh6Yx8amV3hGpzapiIaOksoFJLHU9oZ4NtiHWlHC0sSXKxk3mF%2B21laOiIUlvBKMrC1TX%2FQSq7VWgwrNAHd1t7beQ8f4ik4xg90Vlqg0veF6HA6O%2BhFuUlSRWm%2BXbZkhsxGHXUfUiht5D8gk%2FrrFUsmXHfWDB72F725QBvDFctqxIfd28fCFaXNN8v3%2B6b3Ia7EiDM1hj2cK%2Bd7xxPEyOIg%2FDX7Q90%2FfZC3nNXa9iwp10cisIizS5Y0e%2FPUtjnk3ar%2FdpcKFExryacVsj6vCQER6wqrwUI4f%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw4OTIyMDUxMTU1NjYiDD6r888gcDNKCtm4HCqDBfJZbvGi8pAmxekIkEG5ij6fgvCdUdgHteSKLJhBcCe%2BpmUxbqsT4or9RpBHkbraWojx0LljfKU%2FFWQ4jJiuwcAahVfQZ8hpjZTd8Rs7hXx%2BZ0TMUFP1jnQm4jb5DiEUyPuHKP%2Ft%2FIvWdoZiSdhhmENDLewTjkZyMANS%2By6tLoblZM6rNsmxtxIUgBoNHMj4nPZLcJbhaoaZW2NFTd8K4uAPtZH4ivQ47kNu35W%2BX3CDXbByUv2%2BaCf8XBQ%2FtVx8wzuSOPBCanOayPfqAld7%2BK5XWIDt9JaLztqnnoNQ%2Bpw2jhiLUwLKeW710VaYFtF4UfaMJPQ5FnU2Qzbz%2BPIzwPbF6D%2B7kmD19RrWiQmD3U6A0%2B%2BQ83RSRfcEuUXswWgd1v09kuVMfzr2dii7FtdxZgonFdfIWtls1F7mccjeKS4nJgdd4TujD8NExe56qElMVle3aOBwi1GMSJ5lKiyszdqhbsvBB1rhQhIOURxj1C6ndAhnmp%2Bm1icw12gqJzCJPY9dw48484PhsxJbuYXX%2B4p7rpXgojuqTHnRrYhWmhk1pePwqXyZ%2FspOFVc1q2Fv%2F56v6jOhnEh7SB0VY0azz69x9igS8n2692xfaR%2FQDNmQKBtxIC3HOCcxVS3CMzbJ9%2FH9HjoIASMn9n2l26YzGZ5WxFuiIYHrwFiG8R6%2BYIcIiUpiEyRh2kXtOzsTSp0rcN9Uc%2FLC6Q6YjnNYfYMOqLVpapR5%2FhpO0c5Fq2jqd4yRwm5Id4KPPaQ0HWaySoJr%2Bp%2BGEeFD2h78Xx4D%2FE%2B9I3NBG1eP5c4QTmpfi%2F28dkew2B1Kh8EV9fRhBKsygn1uh0Zy3KQWCWFZ5H5NJNnZfut0L%2FgwzbLW4AU%3D","instanceCount":2,"instanceDuration":4,"priceTarget":58.752,"mask":"?a?a","dictionaryFile":"wordlist/rockyou.7z","rulesFiles":["rules/d3ad0ne.rule.7z"]}'); - -/* Spot Monitor - -var handler = require("./spot_monitor/main"); - -var sim = {event: {}, context: {}}; - -sim.event = JSON.parse('{"Records":[{"messageId":"c80e8021-a70a-42c7-a470-796e1186f753","receiptHandle":"AQEBJQ+/u6NsnT5t8Q/VbVxgdUl4TMKZ5FqhksRdIQvLBhwNvADoBxYSOVeCBXdnS9P+erlTtwEALHsnBXynkfPLH3BOUqmgzP25U8kl8eHzq6RAlzrSOfTO8ox9dcp6GLmW33YjO3zkq5VRYyQlJgLCiAZUpY2D4UQcE5D1Vm8RoKfbE+xtVaOctYeINjaQJ1u3mWx9T7tork3uAlOe1uyFjCWU5aPX/1OHhWCGi2EPPZj6vchNqDOJC/Y2k1gkivqCjz1CZl6FlZ7UVPOx3AMoszPuOYZ+Nuqpx2uCE2MHTtMHD8PVjlsWirt56oUr6JPp9aRGo6bitPIOmi4dX0FmuMKD6u/JnuZCp+AXtJVTmSHS8IXt/twsKU7A+fiMK01NtD5msNgVPoe9JbFtlGwvTQ==","body":"","attributes":{"ApproximateReceiveCount":"3","SentTimestamp":"1529104986221","SenderId":"594035263019","ApproximateFirstReceiveTimestamp":"1529104986230"},"messageAttributes":{},"md5OfBody":"9bb58f26192e4ba00f01e2e7b136bbd8","eventSource":"aws:sqs","eventSourceARN":"arn:aws:sqs:us-west-2:123456789012:MyQueue","awsRegion":"us-west-2"}]}'); -sim.event.Records[0].body = JSON.stringify({ - "region": "us-west-2", - "availabilityZone": "us-west-2c", - "instanceType": "t3.nano", - "hashFile": "uploads/README.md", - "instanceCount": "3", - "instanceDuration": "9", - "priceTarget": 198.288, - "mask": "?a?a?d", - "dictionaryFile": "wordlist/rockyou.7z", - "rulesFiles": [ - "rules/d3ad0ne.rule.7z" - ], - "campaignId": 0, - "cognitoIdentityId": 0, - "spotFleetRequestId": "sfr-57485354-b918-4697-a746-013141f9f2d5" -}); - -*/ - -handler.main(sim.event, sim.context, function(err, data) { - if (err) { - throw Error(err); - } else { - console.log(data); - } - - process.exit(0); -}); \ No newline at end of file diff --git a/terraform/npk-settings.json.sample b/terraform/npk-settings.json.sample deleted file mode 100644 index 1b06fff..0000000 --- a/terraform/npk-settings.json.sample +++ /dev/null @@ -1,27 +0,0 @@ -{ - "backend_bucket": "terraform-backend-", - "campaign_data_ttl": 604800, - "campaign_max_price": 50, - "georestrictions": ["US", "CA", "GB", "DE"], - - "useCustomDNS": false, - "route53Zone": "E10SDSEFH1102DF", - "dnsNames": { - "www": [ - "dev.npkproject.io" - ], - "api": [ - "api.dev.npkproject.io" - ] - }, - - "awsProfile": "npk", - "criticalEventsSMS": "+13035551234", - "adminEmail": "demo@npkproject.io", - "debug_lambda": false, - - "useSAML": false, - "sAMLMetadataFile": "/home/self/Documents/CorpSAMLMetadata.xml" - - OR - - "sAMLMetadataUrl": "https://myfederatedprovider.com/saml/metadata.xml" -} diff --git a/terraform/s3_policies.tf b/terraform/s3_policies.tf deleted file mode 100644 index 546def5..0000000 --- a/terraform/s3_policies.tf +++ /dev/null @@ -1,18 +0,0 @@ -/* Static Site Bucket Policy */ - -data "aws_iam_policy_document" "s3_static_site" { - statement { - actions = ["s3:GetObject"] - resources = ["${aws_s3_bucket.static_site.arn}/*"] - - principals { - type = "AWS" - identifiers = ["${aws_cloudfront_origin_access_identity.npk.iam_arn}"] - } - } -} - -resource "aws_s3_bucket_policy" "s3_static_site" { - bucket = "${aws_s3_bucket.static_site.id}" - policy = "${data.aws_iam_policy_document.s3_static_site.json}" -} \ No newline at end of file diff --git a/terraform/template-inject_api_handler.json b/terraform/template-inject_api_handler.json deleted file mode 100644 index 417cb90..0000000 --- a/terraform/template-inject_api_handler.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "us-east-1": { - "us-east-1a": "${us-east-1a}", - "us-east-1b": "${us-east-1b}", - "us-east-1c": "${us-east-1c}", - "us-east-1d": "${us-east-1d}", - "us-east-1e": "${us-east-1e}", - "us-east-1f": "${us-east-1f}" - }, - "us-east-2": { - "us-east-2a": "${us-east-2a}", - "us-east-2b": "${us-east-2b}", - "us-east-2c": "${us-east-2c}" - }, - "us-west-1": { - "us-west-1b": "${us-west-1b}", - "us-west-1c": "${us-west-1c}" - }, - "us-west-2": { - "us-west-2a": "${us-west-2a}", - "us-west-2b": "${us-west-2b}", - "us-west-2c": "${us-west-2c}", - "us-west-2d": "${us-west-2d}" - } -} diff --git a/terraform/templates/api_handler_variables.tpl b/terraform/templates/api_handler_variables.tpl deleted file mode 100644 index 8e01e15..0000000 --- a/terraform/templates/api_handler_variables.tpl +++ /dev/null @@ -1,38 +0,0 @@ -module.exports = { - www_dns_names: ['${www_dns_name}'], - campaign_max_price: ${campaign_max_price}, - dictionary_buckets: { - "us-east-1": "${use1}", - "us-east-2": "${use2}", - "us-west-1": "${usw1}", - "us-west-2": "${usw2}", - }, - userdata_bucket: "${userdata}", - instanceProfile: "${instanceProfile}", - iamFleetRole: "${iamFleetRole}", - availabilityZones: { - "us-east-1": { - "us-east-1a": "${us-east-1a}", - "us-east-1b": "${us-east-1b}", - "us-east-1c": "${us-east-1c}", - "us-east-1d": "${us-east-1d}", - "us-east-1e": "${us-east-1e}", - "us-east-1f": "${us-east-1f}" - }, - "us-east-2": { - "us-east-2a": "${us-east-2a}", - "us-east-2b": "${us-east-2b}", - "us-east-2c": "${us-east-2c}" - }, - "us-west-1": { - "us-west-1a": "${us-west-1a}", - "us-west-1c": "${us-west-1c}" - }, - "us-west-2": { - "us-west-2a": "${us-west-2a}", - "us-west-2b": "${us-west-2b}", - "us-west-2c": "${us-west-2c}", - "us-west-2d": "${us-west-2d}" - } -} -} \ No newline at end of file diff --git a/terraform/templates/npk_settings.tpl b/terraform/templates/npk_settings.tpl deleted file mode 100644 index e24160c..0000000 --- a/terraform/templates/npk_settings.tpl +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - "www_dns_names": ['${www_dns_name}'], - "region": "${region}", - "campaign_max_price": ${campaign_max_price}, - "critical_events_sns_topic": "${critical_events_sns_topic}", - "availabilityZones": { - "us-east-1": [ - "us-east-1a", - "us-east-1b", - "us-east-1c", - "us-east-1d", - "us-east-1e", - "us-east-1f" - ], - "us-east-2": [ - "us-east-2a", - "us-east-2b", - "us-east-2c" - ], - "us-west-1": [ - "us-west-1a", - "us-west-1c" - ], - "us-west-2": [ - "us-west-2a", - "us-west-2b", - "us-west-2c", - "us-west-2d" - ] -} -} \ No newline at end of file diff --git a/terraform/templates/userdata.tpl b/terraform/templates/userdata.tpl deleted file mode 100644 index 51d083b..0000000 --- a/terraform/templates/userdata.tpl +++ /dev/null @@ -1,109 +0,0 @@ -#! /bin/bash -cd /root/ - -echo {{APIGATEWAY}} > /root/apigateway - -export APIGATEWAY=$(cat /root/apigateway) -export USERDATA=${userdata} -export INSTANCEID=`wget -qO- http://169.254.169.254/latest/meta-data/instance-id` -export REGION=`wget -qO- http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'` -aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCEID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/\1="\2"/' | sed -r 's/aws:ec2spot:fleet-request-id/SpotFleet/' > ec2-tags - -. ec2-tags - -# This is required for the wrapper to get anything done. -export ManifestPath=$ManifestPath -echo $ManifestPath > /root/manifestpath - -yum install -y jq - -export BUCKET=`echo '${dictionaryBuckets}' | jq -r --arg REGION $REGION '.[$REGION]'` - -echo "Using dictionary bucket $BUCKET"; - -mkdir /potfiles - -# format & mount /dev/xvdb -mkfs.ext4 /dev/xvdb -mkdir /xvdb -mount /dev/xvdb /xvdb/ -mkdir /xvdb/npk-wordlist -ln -s /xvdb/npk-wordlist /root/npk-wordlist - -aws s3 cp s3://$BUCKET/components-v2/epel.rpm . -aws s3 cp s3://$BUCKET/components-v2/hashcat.7z . -aws s3 cp s3://$BUCKET/components-v2/maskprocessor.7z . -aws s3 cp s3://$BUCKET/components-v2/compute-node.7z . -aws s3 cp s3://$USERDATA/$ManifestPath/manifest.json . -rpm -Uvh epel.rpm -yum install -y p7zip p7zip-plugins - -# Install nvm -curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | /bin/bash - -mv /.nvm /root/ -[ -s "/root/.nvm/nvm.sh" ] && \. "/root/.nvm/nvm.sh" -[ -s "/root/.nvm/bash_completion" ] && \. "/root/.nvm/bash_completion" - -# Install NodeJS v12 -nvm install 12 - -# Retrieve the hashes file -wget -O hashes.txt "$(jq -r '.hashFileUrl' manifest.json)" - -# Make the dirs -mkdir npk-rules - -# Get all manifest components -jq -r '.dictionaryFile' manifest.json | xargs -L1 -I'{}' aws s3 cp s3://$BUCKET/{} ./npk-wordlist/ -jq -r '.rulesFiles[]' manifest.json | xargs -L1 -I'{}' aws s3 cp s3://$BUCKET/{} ./npk-rules/ - -# Unzip them -# 7z x ./npk-wordlist/* -o./npk-wordlist/ -# 7z x ./npk-rules/* -o./npk-rules/ -jq -r '.dictionaryFile' manifest.json | xargs -L1 -I'{}' 7z x ./npk-{} -o./npk-wordlist/ -jq -r '.rulesFiles[]' manifest.json | xargs -L1 -I'{}' 7z x ./npk-{} -o./npk-rules/ - -# Delete the originals -jq -r '.dictionaryFile' manifest.json | xargs -L1 -I'{}' rm ./npk-{} -jq -r '.rulesFiles[]' manifest.json | xargs -L1 -I'{}' rm ./npk-{} - -# Link the output file to potfiles -ln -s /var/log/cloud-init-output.log /potfiles/$${INSTANCEID}-output.log - -# Create the crontab to sync s3 -echo "* * * * * root aws s3 sync s3://$USERDATA/$ManifestPath/potfiles/ /potfiles/ --exclude \"*$${INSTANCEID}*\"" >> /etc/crontab -echo "* * * * * root aws s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ --include \"*$${INSTANCEID}*\"" >> /etc/crontab - -aws ec2 describe-spot-fleet-instances --region $REGION --spot-fleet-request-id $SpotFleet | jq '.ActiveInstances[].InstanceId' | sort > fleet_instances -export INSTANCECOUNT=$(cat fleet_instances | wc -l) -export INSTANCENUMBER=$(cat fleet_instances | grep -nr $INSTANCEID - | cut -d':' -f1) - -7z x hashcat.7z -7z x maskprocessor.7z -mv hashcat-*/ hashcat -mv maskprocessor-*/ maskprocessor - -7z x compute-node.7z - -# Put the envvars in a useful place, in case debugging is needed. -echo "export APIGATEWAY=$APIGATEWAY" >> envvars -echo "export USERDATA=$USERDATA" >> envvars -echo "export INSTANCEID=$INSTANCEID" >> envvars -echo "export REGION=$REGION" >> envvars -echo "export BUCKET=$BUCKET" >> envvars -echo "export ManifestPath=$ManifestPath" >> envvars -echo "export INSTANCECOUNT=$INSTANCECOUNT" >> envvars -echo "export INSTANCENUMBER=$INSTANCENUMBER" >> envvars -echo "export KEYSPACE=$KEYSPACE" >> envvars -chmod +x envvars - -node compute-node/hashcat_wrapper.js -echo "[*] Hashcat wrapper finished with status code $?" -aws s3 sync /potfiles/ s3://$USERDATA/$ManifestPath/potfiles/ -sleep 30 -#/root/hashcat/hashcat.bin -O -w 4 -b --benchmark-all > benchmark-results.txt - -if [[ ! -f /root/nodeath ]]; then - poweroff -fi \ No newline at end of file diff --git a/terraform/terraform.jsonnet b/terraform/terraform.jsonnet deleted file mode 100644 index 4f18529..0000000 --- a/terraform/terraform.jsonnet +++ /dev/null @@ -1,385 +0,0 @@ -local npksettings = import 'npk-settings.json'; -local regions = import 'regions.json'; -local quotas = import 'quotas.json'; -local backend = import 'jsonnet/backend.libsonnet'; -local provider = import 'jsonnet/provider.libsonnet'; -local vpc = import 'jsonnet/vpc.libsonnet'; -local subnet = import 'jsonnet/subnet.libsonnet'; -local route = import 'jsonnet/routetable.libsonnet'; -local igw = import 'jsonnet/igw.libsonnet'; -local dynamodb = import 'jsonnet/dynamodb.libsonnet'; -local dynamodb_settings = import 'jsonnet/dynamodb_settings.libsonnet'; -local cognito_iam_roles = import 'jsonnet/cognito_iam_roles.libsonnet'; -local route53 = import 'jsonnet/route53.libsonnet'; -local s3 = import 'jsonnet/s3.libsonnet'; -local acm = import 'jsonnet/acm.libsonnet'; -local api_gateway = import 'jsonnet/api_gateway.libsonnet'; -local cloudfront = import 'jsonnet/cloudfront.libsonnet'; -local cloudwatch = import 'jsonnet/cloudwatch.libsonnet'; -local cognito = import 'jsonnet/cognito.libsonnet'; -local ec2_iam_roles = import 'jsonnet/ec2_iam_roles.libsonnet'; -local keepers = import 'jsonnet/keepers.libsonnet'; -local lambda_functions = import 'jsonnet/lambda_functions.libsonnet'; -local lambda_iam_roles = import 'jsonnet/lambda_iam_roles.libsonnet'; -local templates = import 'jsonnet/templates.libsonnet'; -local variables = import 'jsonnet/variables.libsonnet'; -local templates = import 'jsonnet/templates.libsonnet'; -local null_resources = import 'jsonnet/null_resources.libsonnet'; - -local settings = npksettings + { - defaultRegion: "us-west-2", - regions: regions, - quotas: quotas -}; - -local defaultResource = { - "tags": { - "Project": "NPK" - } -}; - -local regionKeys = std.objectFields(settings.regions); - -{ - 'acm.tf.json': if settings.useCustomDNS then { - // TODO: Fix this to get 1 cert for all names. - "resource": { - "aws_acm_certificate": { - ["www-" + i]: defaultResource + acm.certificate(settings.dnsNames.www[i]) for i in std.range(0, std.length(settings.dnsNames.www) - 1) - } + { - ["api-" + i]: defaultResource + acm.certificate(settings.dnsNames.api[i]) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - } + if settings.useSAML == true && settings.useCustomDNS == true then { - "saml": acm.certificate("auth." + settings.dnsNames.www[0]) - } else {} - } + if std.type(settings.route53Zone) == "string" then { - "aws_route53_record": { - ["acm-validation-www-" + i]: acm.route53_record( - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_name}", - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_type}", - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_value}", - settings.route53Zone - ) for i in std.range(0, std.length(settings.dnsNames.www) - 1) - } + { - ["acm-validation-api-" + i]: acm.route53_record( - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_name}", - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_type}", - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_value}", - settings.route53Zone - ) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - } + (if settings.useSAML == true && settings.useCustomDNS == true then { - "acm-validation-saml": acm.route53_record( - "${aws_acm_certificate.saml.domain_validation_options.0.resource_record_name}", - "${aws_acm_certificate.saml.domain_validation_options.0.resource_record_type}", - "${aws_acm_certificate.saml.domain_validation_options.0.resource_record_value}", - settings.route53Zone - ) - } else {}), - "aws_acm_certificate_validation": { - ["www-" + i]: acm.certificate_validation( - "${aws_acm_certificate.www-" + i + ".arn}", - "${aws_route53_record.acm-validation-www-" + i + ".fqdn}" - ) for i in std.range(0, std.length(settings.dnsNames.www) - 1) - } + { - ["api-" + i]: acm.certificate_validation( - "${aws_acm_certificate.api-" + i + ".arn}", - "${aws_route53_record.acm-validation-api-" + i + ".fqdn}" - ) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - } + (if settings.useSAML == true && settings.useCustomDNS == true then { - "saml": acm.certificate_validation( - "${aws_acm_certificate.saml.arn}", - "${aws_route53_record.acm-validation-saml.fqdn}" - ) - } else {}) - } else {} - } + if std.type(settings.route53Zone) != "string" then { - "output": { - ["acm-validation-www-" + i]: acm.manual_record( - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_name}", - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_type}", - "${aws_acm_certificate.www-" + i + ".domain_validation_options.0.resource_record_value}" - ) for i in std.range(0, std.length(settings.dnsNames.www) - 1) - } + { - ["acm-validation-api-" + i]: acm.manual_record( - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_name}", - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_type}", - "${aws_acm_certificate.api-" + i + ".domain_validation_options.0.resource_record_value}" - ) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - } - } else {} - else {}, - 'api_gateway.tf.json': { - "resource": api_gateway.resource + if settings.useCustomDNS then { - "aws_api_gateway_domain_name": { - ["api-url-" + i]: api_gateway.domain_name( - settings.dnsNames.api[i], - "${aws_acm_certificate.api-" + i + ".arn}" - ) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - }, - "aws_api_gateway_base_path_mapping": { - ["api-url-" + i]: api_gateway.base_path("${aws_api_gateway_domain_name.api-url-" + i + ".domain_name}") - for i in std.range(0, std.length(settings.dnsNames.api) - 1) - }, - } else {} - }, - 'backend.tf.json': backend(settings), - 'cloudfront.tf.json': { - "resource": cloudfront.resource(settings), - "output": cloudfront.output - }, - 'cloudwatch.tf.json': cloudwatch, - 'cognito_iam_roles.tf.json': { - "resource": cognito_iam_roles.resource, - "data": cognito_iam_roles.data(settings) - }, - 'cognito.tf.json': { - "resource": cognito.resource(settings), - "output": cognito.output(settings) - }, - 'data.tf.json': { - "data": { - "aws_caller_identity": { - "current": {} - } - } - }, - 'dynamodb.tf.json': { - "resource": { - "aws_dynamodb_table": { - [i]: defaultResource + dynamodb[i] for i in std.objectFields(dynamodb) - } - } - }, - 'dynamodb_settings.tf.json': { - "resource": dynamodb_settings - }, - 'ec2_iam_roles.tf.json': ec2_iam_roles, - 'igw.tf.json': { - "resource": { - "aws_internet_gateway": { - [regionKeys[i]]: defaultResource + igw(regionKeys[i]) for i in std.range(0, std.length(regionKeys) - 1) - } - } - }, - 'keepers.tf.json': { - "resource": keepers.resource(settings.adminEmail), - "output": keepers.output - }, - 'keys.tf.json': { - "resource": { - "tls_private_key": { - "ssh": { - "algorithm": "RSA", - "rsa_bits": 4096 - } - }, - "aws_key_pair": { - [region]: { - "provider": "aws." + region, - "key_name": "npk-key", - "public_key": "${tls_private_key.ssh.public_key_openssh}" - } for region in regionKeys - }, - "local_file": { - "ssh_key": { - "sensitive_content": "${tls_private_key.ssh.private_key_pem}", - "filename": "${path.module}/npk.pem", - "file_permission": "0600" - } - } - } - }, - 'lambda_functions.tf.json': { - "resource": lambda_functions.resources(settings), - "data": lambda_functions.data - }, - 'lambda_iam_roles.tf.json': { - "resource": lambda_iam_roles.resource(settings), - "data": lambda_iam_roles.data(settings) - }, - 'null_resources.tf.json': null_resources.resource(settings), - 'provider-aws.tf.json': { - "provider": [ - provider.aws_provider - ] + [ - provider.aws_alias(region) for region in regionKeys - ] - }, - 'provider-other.tf.json': { - "provider": { - "archive": {} - } - }, - 'route53.tf.json': if settings.useCustomDNS && std.type(settings.route53Zone) == "string" then - { - "resource": { - "aws_route53_record": { - ["www-record-" + i]: route53.record( - settings.dnsNames.www[i], - settings.route53Zone, - route53.alias( - "${aws_cloudfront_distribution.npk.domain_name}", - "${aws_cloudfront_distribution.npk.hosted_zone_id}" - ) - ) for i in std.range(0, std.length(settings.dnsNames.www) - 1) - } + { - ["api-record-" + i]: route53.record( - settings.dnsNames.api[i], - settings.route53Zone, - route53.alias( - "${aws_api_gateway_domain_name.api-url-" + i + ".cloudfront_domain_name}", - "${aws_api_gateway_domain_name.api-url-" + i + ".cloudfront_zone_id}" - ) - ) for i in std.range(0, std.length(settings.dnsNames.api) - 1) - } + (if settings.useSAML == true && settings.useCustomDNS == true then { - "saml": route53.record( - "auth." + settings.dnsNames.www[0], - settings.route53Zone, - route53.alias( - "${aws_cognito_user_pool_domain.saml.cloudfront_distribution_arn}", - "Z2FDTNDATAQYW2" - ) - ) - } else {}) - } - } else {}, - 'routetable.tf.json': { - "resource": { - "aws_route_table": { - [regionKeys[i]]: defaultResource + route.routetable(regionKeys[i]) for i in std.range(0, std.length(regionKeys) - 1) - }, - "aws_route_table_association": { - [settings.regions[regionKeys[i]][azi]]: route.association(regionKeys[i], settings.regions[regionKeys[i]][azi]) - for i in std.range(0, std.length(regionKeys) - 1) - for azi in std.range(0, std.length(settings.regions[regionKeys[i]]) - 1) - }, - "aws_vpc_endpoint_route_table_association": { - [regionKeys[i]]: route.endpoint(regionKeys[i], "s3-" + regionKeys[i]) for i in std.range(0, std.length(regionKeys) - 1) - }, - } - }, - 's3.tf.json': { - "resource": { - "aws_s3_bucket": { - "user_data": defaultResource + s3.bucket( - "npk-user-data-", - std.map( - s3.cors_rule, - [ - "http://localhost" - ] + if settings.useCustomDNS then - [ "https://" + i for i in settings.dnsNames.www ] - else - [ "https://${aws_cloudfront_distribution.npk.domain_name}" ] - ) - ) + { - "lifecycle_rule": { - "enabled": "true", - "expiration": { - "days": 7 - }, - "abort_incomplete_multipart_upload_days": 1 - } - }, - "static_site": defaultResource + s3.bucket("npk-site-content-"), - "logs": defaultResource + s3.bucket("npk-logs-") + { - "acl": "log-delivery-write" - } - } - }, - "output": { - "s3_static_site_sync_command": { - "value": "aws --profile " + settings.awsProfile + " s3 --region " + settings.defaultRegion + " sync ${path.module}/../site-content/ s3://${aws_s3_bucket.static_site.id}" - } - } - }, - 's3_policies.tf.json':: { - "data": { - "aws_iam_policy_document": { - "s3_static_site": { - "statement": { - "actions": ["s3:GetObject"], - "resources": ["${aws_s3_bucket.static_site.arn}/*"], - "principals": { - "type": "AWS", - "identifiers": ["${aws_cloudfront_origin_access_identity.npk.iam_arn}"] - } - } - } - } - }, - "resource": { - "aws_s3_bucket_policy": { - "s3_static_site": { - "bucket": "${aws_s3_bucket.static_site.id}", - "policy": "${data.aws_iam_policy_document.s3_static_site.json}" - } - } - } - }, - 'sns.tf.json': { - "resource": { - "aws_sns_topic": { - "critical_events": { - "name": "critical_events" - } - }, - "aws_sns_topic_subscription": { - "critical_events_sms": { - "depends_on": ["aws_cloudfront_distribution.npk"], - - "topic_arn": "${aws_sns_topic.critical_events.arn}", - "protocol": "sms", - "endpoint": settings.criticalEventsSMS - } - } - } - }, - 'sqs.tf.json': { - "resource": { - "aws_sqs_queue": { - "api_handler_dlq": { - "name": "api_handler_dlq" - }, - "status_reporter_dlq": { - "name": "status_reporter_dlq" - } - } - } - }, - 'subnet.tf.json': { - "resource": { - "aws_subnet": { - [settings.regions[regionKeys[i]][azi]]: subnet(regionKeys[i], settings.regions[regionKeys[i]][azi], azi) - for i in std.range(0, std.length(regionKeys) - 1) - for azi in std.range(0, std.length(settings.regions[regionKeys[i]]) - 1) - } - } - }, - 'templates.tf.json': { - "data": templates.data(settings), - "resource": templates.resource - }, - 'template-inject_api_handler.json': { - [regionKeys[i]]: templates.az(settings.regions[regionKeys[i]]) - for i in std.range(0, std.length(regionKeys) - 1) - }, - 'variables.tf.json': { - "variable": variables.variables(settings) + { - "profile": { "default": settings.awsProfile }, - "region": { "default": settings.defaultRegion }, - "campaign_data_ttl": { "default": settings.campaign_data_ttl }, - "campaign_max_price": { "default": settings.campaign_max_price }, - "useSAML": { "default": settings.useSAML } - } - }, - 'vpc.tf.json': { - "resource": { - "aws_vpc": { - [regionKeys[i]]: vpc.vpc(regionKeys[i], i) for i in std.range(0, std.length(regionKeys) - 1) - }, - "aws_vpc_endpoint": { - ["s3-" + regionKeys[i]]: vpc.endpoint(regionKeys[i]) for i in std.range(0, std.length(regionKeys) - 1) - }, - } - } -} \ No newline at end of file diff --git a/terraform-selfhost/tools/g3-benchmarks.txt b/tools/benchmarking/g3-benchmarks.txt similarity index 100% rename from terraform-selfhost/tools/g3-benchmarks.txt rename to tools/benchmarking/g3-benchmarks.txt diff --git a/tools/benchmarking/g4ad-benchmarks.txt b/tools/benchmarking/g4ad-benchmarks.txt new file mode 100644 index 0000000..248c81b --- /dev/null +++ b/tools/benchmarking/g4ad-benchmarks.txt @@ -0,0 +1,1563 @@ +hashcat (v6.2.4) starting in benchmark mode + +OpenCL API (OpenCL 2.1 AMD-APP (3110.6)) - Platform #1 [Advanced Micro Devices, Inc.] +===================================================================================== +* Device #1: AMD Radeon Pro V520 MxGPU, 7936/8048 MB (6623 MB allocatable), 18MCU + +Benchmark relevant options: +=========================== +* --benchmark-all +* --optimized-kernel-enable +* --workload-profile=4 + +* Hash-Mode 0 (MD5) + +Speed.#1.........: 19395.2 MH/s (123.44ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 10 (md5($pass.$salt)) + +Speed.#1.........: 19426.5 MH/s (123.35ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 11 (Joomla < 2.5.18) + +Speed.#1.........: 19403.4 MH/s (123.33ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 12 (PostgreSQL) + +Speed.#1.........: 19429.8 MH/s (123.32ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 20 (md5($salt.$pass)) + +Speed.#1.........: 10178.7 MH/s (235.63ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 21 (osCommerce, xt:Commerce) + +Speed.#1.........: 10182.6 MH/s (235.67ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22 (Juniper NetScreen/SSG (ScreenOS)) + +Speed.#1.........: 10187.5 MH/s (235.25ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 23 (Skype) + +Speed.#1.........: 10185.1 MH/s (235.69ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 24 (SolarWinds Serv-U) + +Speed.#1.........: 10176.0 MH/s (235.65ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 30 (md5(utf16le($pass).$salt)) + +Speed.#1.........: 19431.9 MH/s (123.30ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 40 (md5($salt.utf16le($pass))) + +Speed.#1.........: 10201.2 MH/s (234.99ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 50 (HMAC-MD5 (key = $pass)) + +Speed.#1.........: 2985.3 MH/s (402.48ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 60 (HMAC-MD5 (key = $salt)) + +Speed.#1.........: 5935.1 MH/s (404.13ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 70 (md5(utf16le($pass))) + +Speed.#1.........: 19452.1 MH/s (123.20ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 100 (SHA1) + +Speed.#1.........: 7606.8 MH/s (315.40ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 101 (nsldap, SHA-1(Base64), Netscape LDAP SHA) + +Speed.#1.........: 7614.4 MH/s (315.42ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 110 (sha1($pass.$salt)) + +Speed.#1.........: 7651.8 MH/s (313.52ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 111 (nsldaps, SSHA-1(Base64), Netscape LDAP SSHA) + +Speed.#1.........: 7613.6 MH/s (315.39ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 112 (Oracle S: Type (Oracle 11+)) + +Speed.#1.........: 7648.7 MH/s (313.48ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 120 (sha1($salt.$pass)) + +Speed.#1.........: 6080.4 MH/s (395.31ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 121 (SMF (Simple Machines Forum) > v1.1) + +Speed.#1.........: 6071.3 MH/s (395.31ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 122 (macOS v10.4, macOS v10.5, macOS v10.6) + +Speed.#1.........: 6066.2 MH/s (395.90ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 124 (Django (SHA-1)) + +Speed.#1.........: 6062.1 MH/s (395.88ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 125 (ArubaOS) + +Speed.#1.........: 6069.8 MH/s (395.92ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 130 (sha1(utf16le($pass).$salt)) + +Speed.#1.........: 7652.3 MH/s (313.42ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 131 (MSSQL (2000)) + +Speed.#1.........: 7662.9 MH/s (313.40ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 132 (MSSQL (2005)) + +Speed.#1.........: 7653.5 MH/s (313.37ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 133 (PeopleSoft) + +Speed.#1.........: 7620.5 MH/s (315.29ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 140 (sha1($salt.utf16le($pass))) + +Speed.#1.........: 6063.1 MH/s (395.84ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 141 (Episerver 6.x < .NET 4) + +Speed.#1.........: 6070.1 MH/s (395.82ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 150 (HMAC-SHA1 (key = $pass)) + +Speed.#1.........: 1739.1 MH/s (344.95ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 160 (HMAC-SHA1 (key = $salt)) + +Speed.#1.........: 3273.1 MH/s (367.28ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 170 (sha1(utf16le($pass))) + +Speed.#1.........: 7610.0 MH/s (315.23ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 200 (MySQL323) + +Speed.#1.........: 45814.5 MH/s (51.96ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 300 (MySQL4.1/MySQL5) + +Speed.#1.........: 3391.0 MH/s (353.89ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 400 (phpass) [Iterations: 2048] + +Speed.#1.........: 5478.7 kH/s (202.44ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) [Iterations: 1000] + +Speed.#1.........: 7716.0 kH/s (284.61ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 501 (Juniper IVE) [Iterations: 1000] + +Speed.#1.........: 7665.5 kH/s (284.61ms) @ Accel:1024 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 600 (BLAKE2b-512) + +Speed.#1.........: 1728.0 MH/s (347.48ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 900 (MD4) + +Speed.#1.........: 31318.2 MH/s (76.20ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1000 (NTLM) + +Speed.#1.........: 31349.3 MH/s (76.20ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 1100 (Domain Cached Credentials (DCC), MS Cache) + +Speed.#1.........: 10791.5 MH/s (222.02ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1300 (SHA2-224) + +Speed.#1.........: 3143.2 MH/s (382.34ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 1400 (SHA2-256) + +Speed.#1.........: 3206.0 MH/s (374.19ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 1410 (sha256($pass.$salt)) + +Speed.#1.........: 3218.1 MH/s (373.15ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1411 (SSHA-256(Base64), LDAP {SSHA256}) + +Speed.#1.........: 3205.6 MH/s (374.24ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 1420 (sha256($salt.$pass)) + +Speed.#1.........: 2912.7 MH/s (412.40ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 1421 (hMailServer) + +Speed.#1.........: 2907.0 MH/s (412.72ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 1430 (sha256(utf16le($pass).$salt)) + +Speed.#1.........: 3220.2 MH/s (373.12ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1440 (sha256($salt.utf16le($pass))) + +Speed.#1.........: 2908.3 MH/s (412.69ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1441 (Episerver 6.x >= .NET 4) + +Speed.#1.........: 2911.1 MH/s (412.70ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 1450 (HMAC-SHA256 (key = $pass)) + +Speed.#1.........: 631.7 MH/s (474.95ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 1460 (HMAC-SHA256 (key = $salt)) + +Speed.#1.........: 1383.0 MH/s (435.28ms) @ Accel:512 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 1470 (sha256(utf16le($pass))) + +Speed.#1.........: 3205.6 MH/s (374.18ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1500 (descrypt, DES (Unix), Traditional DES) + +Speed.#1.........: 695.1 MH/s (433.03ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) [Iterations: 1000] + +Speed.#1.........: 7663.4 kH/s (284.57ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 1700 (SHA2-512) + +Speed.#1.........: 922.9 MH/s (324.75ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 1710 (sha512($pass.$salt)) + +Speed.#1.........: 818.6 MH/s (366.74ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 1711 (SSHA-512(Base64), LDAP {SSHA512}) + +Speed.#1.........: 817.4 MH/s (366.74ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 1720 (sha512($salt.$pass)) + +Speed.#1.........: 882.0 MH/s (340.43ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 1722 (macOS v10.7) + +Speed.#1.........: 880.8 MH/s (340.38ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 1730 (sha512(utf16le($pass).$salt)) + +Speed.#1.........: 820.3 MH/s (366.74ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 1731 (MSSQL (2012, 2014)) + +Speed.#1.........: 817.2 MH/s (366.74ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 1740 (sha512($salt.utf16le($pass))) + +Speed.#1.........: 812.8 MH/s (369.51ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 1750 (HMAC-SHA512 (key = $pass)) + +Speed.#1.........: 190.9 MH/s (393.33ms) @ Accel:2048 Loops:64 Thr:32 Vec:1 + +* Hash-Mode 1760 (HMAC-SHA512 (key = $salt)) + +Speed.#1.........: 400.7 MH/s (375.48ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 1770 (sha512(utf16le($pass))) + +Speed.#1.........: 817.6 MH/s (366.71ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 1800 (sha512crypt $6$, SHA512 (Unix)) [Iterations: 5000] + +Speed.#1.........: 156.1 kH/s (331.81ms) @ Accel:1024 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2000 (STDOUT) + +Speed.#1.........: 11204.3 GH/s (0.02ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) [Iterations: 10239] + +Speed.#1.........: 312.2 kH/s (375.84ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 2400 (Cisco-PIX MD5) + +Speed.#1.........: 12891.8 MH/s (186.18ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2410 (Cisco-ASA MD5) + +Speed.#1.........: 12882.9 MH/s (186.30ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2600 (md5(md5($pass))) + +Speed.#1.........: 5802.2 MH/s (414.15ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2611 (vBulletin < v3.8.5) + +Speed.#1.........: 5802.8 MH/s (414.11ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2612 (PHPS) + +Speed.#1.........: 5802.6 MH/s (414.13ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2711 (vBulletin >= v3.8.5) + +Speed.#1.........: 3936.9 MH/s (305.05ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 2811 (MyBB 1.2+, IPB2+ (Invision Power Board)) + +Speed.#1.........: 4074.6 MH/s (294.62ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 3000 (LM) + +Speed.#1.........: 18776.8 MH/s (127.60ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 3100 (Oracle H: Type (Oracle 7+)) + +Speed.#1.........: 443.3 MH/s (339.00ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 3200 (bcrypt $2*$, Blowfish (Unix)) [Iterations: 32] + +Speed.#1.........: 19421 H/s (412.34ms) @ Accel:512 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 3500 (md5(md5(md5($pass)))) + +Speed.#1.........: 3736.1 MH/s (321.67ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 3710 (md5($salt.md5($pass))) + +Speed.#1.........: 5312.1 MH/s (452.03ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 3711 (MediaWiki B type) + +Speed.#1.........: 5316.6 MH/s (452.09ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 3800 (md5($salt.$pass.$salt)) + +Speed.#1.........: 10190.1 MH/s (235.65ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 3910 (md5(md5($pass).md5($salt))) + +Speed.#1.........: 3939.0 MH/s (305.03ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4010 (md5($salt.md5($salt.$pass))) + +Speed.#1.........: 4739.9 MH/s (253.11ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4110 (md5($salt.md5($pass.$salt))) + +Speed.#1.........: 5314.2 MH/s (452.24ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 4300 (md5(strtoupper(md5($pass)))) + +Speed.#1.........: 5803.0 MH/s (414.11ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4400 (md5(sha1($pass))) + +Speed.#1.........: 3970.6 MH/s (302.53ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4500 (sha1(sha1($pass))) + +Speed.#1.........: 3119.5 MH/s (385.23ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 4510 (sha1(sha1($pass).$salt)) + +Speed.#1.........: 3026.4 MH/s (396.99ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 4520 (sha1($salt.sha1($pass))) + +Speed.#1.........: 1922.6 MH/s (312.52ms) @ Accel:512 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 4521 (Redmine) + +Speed.#1.........: 1921.1 MH/s (312.49ms) @ Accel:512 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 4522 (PunBB) + +Speed.#1.........: 2888.6 MH/s (415.82ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4700 (sha1(md5($pass))) + +Speed.#1.........: 4107.9 MH/s (292.09ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 4710 (sha1(md5($pass).$salt)) + +Speed.#1.........: 3943.6 MH/s (304.53ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 4711 (Huawei sha1(md5($pass).$salt)) + +Speed.#1.........: 3943.0 MH/s (304.60ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 4800 (iSCSI CHAP authentication, MD5(CHAP)) + +Speed.#1.........: 12699.6 MH/s (188.89ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4900 (sha1($salt.$pass.$salt)) + +Speed.#1.........: 5952.9 MH/s (403.55ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 5000 (sha1(sha1($salt.$pass.$salt))) + +Speed.#1.........: 2934.8 MH/s (409.57ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 5100 (Half MD5) + +Speed.#1.........: 11702.7 MH/s (205.02ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 5200 (Password Safe v3) [Iterations: 2049] + +Speed.#1.........: 1202.9 kH/s (303.53ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 5300 (IKE-PSK MD5) + +Speed.#1.........: 712.1 MH/s (421.76ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 5400 (IKE-PSK SHA1) + +Speed.#1.........: 393.5 MH/s (382.14ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 5500 (NetNTLMv1 / NetNTLMv1+ESS) + +Speed.#1.........: 21063.3 MH/s (113.68ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 5600 (NetNTLMv2) + +Speed.#1.........: 1299.8 MH/s (462.21ms) @ Accel:512 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 5700 (Cisco-IOS type 4 (SHA256)) + +Speed.#1.........: 3210.9 MH/s (374.24ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 5800 (Samsung Android Password/PIN) [Iterations: 1023] + +Speed.#1.........: 4940.6 kH/s (413.70ms) @ Accel:512 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 6000 (RIPEMD-160) + +Speed.#1.........: 4098.1 MH/s (293.03ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 6100 (Whirlpool) + +Speed.#1.........: 446.8 MH/s (336.39ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) [Iterations: 1999] + +Speed.#1.........: 245.7 kH/s (305.20ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 1999] + +Speed.#1.........: 140.2 kH/s (267.12ms) @ Accel:2048 Loops:64 Thr:32 Vec:1 + +* Hash-Mode 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 1999] + +Speed.#1.........: 98245 H/s (381.65ms) @ Accel:2048 Loops:64 Thr:32 Vec:1 + +* Hash-Mode 6221 (TrueCrypt SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 400.4 kH/s (320.53ms) @ Accel:1024 Loops:124 Thr:64 Vec:1 + +* Hash-Mode 6222 (TrueCrypt SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 197.9 kH/s (321.17ms) @ Accel:1024 Loops:124 Thr:32 Vec:1 + +* Hash-Mode 6223 (TrueCrypt SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 134.6 kH/s (269.20ms) @ Accel:512 Loops:62 Thr:64 Vec:1 + +* Hash-Mode 6231 (TrueCrypt Whirlpool + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 20979 H/s (288.88ms) @ Accel:16 Loops:499 Thr:64 Vec:1 + +* Hash-Mode 6232 (TrueCrypt Whirlpool + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 10949 H/s (333.80ms) @ Accel:8 Loops:249 Thr:128 Vec:1 + +* Hash-Mode 6233 (TrueCrypt Whirlpool + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 7292 H/s (250.04ms) @ Accel:4 Loops:249 Thr:128 Vec:1 + +* Hash-Mode 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 485.0 kH/s (265.00ms) @ Accel:1024 Loops:124 Thr:64 Vec:1 + +* Hash-Mode 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 273.8 kH/s (232.10ms) @ Accel:256 Loops:124 Thr:128 Vec:1 + +* Hash-Mode 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 190.9 kH/s (331.52ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 6300 (AIX {smd5}) [Iterations: 1000] + +Speed.#1.........: 6938.0 kH/s (284.87ms) @ Accel:1024 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 6400 (AIX {ssha256}) [Iterations: 63] + +Speed.#1.........: 15220.5 kH/s (58.31ms) @ Accel:1024 Loops:63 Thr:64 Vec:1 + +* Hash-Mode 6500 (AIX {ssha512}) [Iterations: 63] + +Speed.#1.........: 5448.5 kH/s (181.97ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 + +* Hash-Mode 6600 (1Password, agilekeychain) [Iterations: 999] + +Speed.#1.........: 3052.0 kH/s (367.10ms) @ Accel:1024 Loops:999 Thr:64 Vec:1 + +* Hash-Mode 6700 (AIX {ssha1}) [Iterations: 63] + +Speed.#1.........: 28697.0 kH/s (23.19ms) @ Accel:1024 Loops:63 Thr:64 Vec:1 + +* Hash-Mode 6800 (LastPass + LastPass sniffed) [Iterations: 499] + +Speed.#1.........: 1790.8 kH/s (442.84ms) @ Accel:256 Loops:499 Thr:256 Vec:1 + +* Hash-Mode 6900 (GOST R 34.11-94) + +Speed.#1.........: 227.6 MH/s (330.24ms) @ Accel:2048 Loops:64 Thr:32 Vec:1 + +* Hash-Mode 7000 (FortiGate (FortiOS)) + +Speed.#1.........: 6905.4 MH/s (347.98ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 7100 (macOS v10.8+ (PBKDF2-SHA512)) [Iterations: 1023] + +Speed.#1.........: 340.5 kH/s (334.28ms) @ Accel:512 Loops:127 Thr:128 Vec:1 + +* Hash-Mode 7200 (GRUB 2) [Iterations: 1023] + +Speed.#1.........: 340.2 kH/s (334.23ms) @ Accel:512 Loops:127 Thr:128 Vec:1 + +* Hash-Mode 7300 (IPMI2 RAKP HMAC-SHA1) + +Speed.#1.........: 994.2 MH/s (302.04ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 7400 (sha256crypt $5$, SHA256 (Unix)) [Iterations: 5000] + +Speed.#1.........: 269.0 kH/s (392.46ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 7401 (MySQL $A$ (sha256crypt)) [Iterations: 5000] + +Speed.#1.........: 255.8 kH/s (414.65ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) + +Speed.#1.........: 304.4 MH/s (247.46ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 7700 (SAP CODVN B (BCODE)) + +Speed.#1.........: 1240.9 MH/s (241.80ms) @ Accel:512 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) + +Speed.#1.........: 1246.8 MH/s (240.49ms) @ Accel:512 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 7800 (SAP CODVN F/G (PASSCODE)) + +Speed.#1.........: 1192.7 MH/s (251.48ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) + +Speed.#1.........: 1209.6 MH/s (248.43ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 7900 (Drupal7) [Iterations: 16384] + +Speed.#1.........: 51016 H/s (359.69ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 8000 (Sybase ASE) + +Speed.#1.........: 395.6 MH/s (380.12ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 8100 (Citrix NetScaler (SHA1)) + +Speed.#1.........: 6768.5 MH/s (354.94ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 8200 (1Password, cloudkeychain) [Iterations: 39999] + +Speed.#1.........: 9108 H/s (370.10ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 8300 (DNSSEC (NSEC3)) + +Speed.#1.........: 2966.7 MH/s (405.38ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 8400 (WBB3 (Woltlab Burning Board)) + +Speed.#1.........: 1296.2 MH/s (463.44ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 8500 (RACF) + +Speed.#1.........: 2661.9 MH/s (451.52ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 8600 (Lotus Notes/Domino 5) + +Speed.#1.........: 198.7 MH/s (378.47ms) @ Accel:1024 Loops:64 Thr:64 Vec:1 + +* Hash-Mode 8700 (Lotus Notes/Domino 6) + +Speed.#1.........: 65795.1 kH/s (285.96ms) @ Accel:32 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 8800 (Android FDE <= 4.3) [Iterations: 1999] + +Speed.#1.........: 705.3 kH/s (367.41ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 8900 (scrypt) [Iterations: 16384] + +Speed.#1.........: 487 H/s (48.77ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9000 (Password Safe v2) [Iterations: 1000] + +Speed.#1.........: 426.8 kH/s (436.82ms) @ Accel:1024 Loops:1000 Thr:16 Vec:1 + +* Hash-Mode 9100 (Lotus Notes/Domino 8) [Iterations: 4999] + +Speed.#1.........: 630.2 kH/s (367.20ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) [Iterations: 19999] + +Speed.#1.........: 58099 H/s (473.94ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 9300 (Cisco-IOS $9$ (scrypt)) [Iterations: 16384] + +Speed.#1.........: 1280 H/s (5.97ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9400 (MS Office 2007) [Iterations: 50000] + +Speed.#1.........: 126.7 kH/s (378.16ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 9500 (MS Office 2010) [Iterations: 100000] + +Speed.#1.........: 63413 H/s (378.21ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 9600 (MS Office 2013) [Iterations: 100000] + +Speed.#1.........: 8402 H/s (318.79ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) + +Speed.#1.........: 298.0 MH/s (252.58ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) + +Speed.#1.........: 377.4 MH/s (396.00ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) + +Speed.#1.........: 1603.2 MH/s (375.85ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) + +Speed.#1.........: 361.5 MH/s (416.72ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) + +Speed.#1.........: 387.3 MH/s (385.70ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) + +Speed.#1.........: 3180.4 MH/s (189.13ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9900 (Radmin2) + +Speed.#1.........: 6310.1 MH/s (380.77ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 10000 (Django (PBKDF2-SHA256)) [Iterations: 9999] + +Speed.#1.........: 116.2 kH/s (474.13ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 10100 (SipHash) + +Speed.#1.........: 25336.3 MH/s (94.33ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 10200 (CRAM-MD5) + +Speed.#1.........: 2984.9 MH/s (402.39ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) [Iterations: 1023] + +Speed.#1.........: 4768.6 kH/s (471.27ms) @ Accel:1024 Loops:1023 Thr:128 Vec:1 + +* Hash-Mode 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) + +Speed.#1.........: 409.6 MH/s (367.73ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) + +Speed.#1.........: 436.4 MH/s (341.83ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) + +Speed.#1.........: 6056.7 MH/s (99.05ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) [Iterations: 70] + +Speed.#1.........: 16388.2 kH/s (30.30ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 10600 (PDF 1.7 Level 3 (Acrobat 9)) + +Speed.#1.........: 3210.8 MH/s (374.36ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) [Iterations: 64] + +Speed.#1.........: 44943 H/s (397.24ms) @ Accel:128 Loops:8 Thr:64 Vec:1 + +* Hash-Mode 10800 (SHA2-384) + +Speed.#1.........: 911.4 MH/s (329.53ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 10810 (sha384($pass.$salt)) + +Speed.#1.........: 910.7 MH/s (329.96ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 10820 (sha384($salt.$pass)) + +Speed.#1.........: 869.9 MH/s (345.14ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 10830 (sha384(utf16le($pass).$salt)) + +Speed.#1.........: 910.7 MH/s (329.81ms) @ Accel:512 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 10840 (sha384($salt.utf16le($pass))) + +Speed.#1.........: 870.1 MH/s (345.07ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 10870 (sha384(utf16le($pass))) + +Speed.#1.........: 911.1 MH/s (329.51ms) @ Accel:512 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 10900 (PBKDF2-HMAC-SHA256) [Iterations: 999] + +Speed.#1.........: 1295.1 kH/s (295.52ms) @ Accel:512 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 10901 (RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256)) [Iterations: 8191] + +Speed.#1.........: 154.9 kH/s (473.38ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 11000 (PrestaShop) + +Speed.#1.........: 6649.9 MH/s (361.38ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 11100 (PostgreSQL CRAM (MD5)) + +Speed.#1.........: 5795.1 MH/s (414.33ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 11200 (MySQL CRAM (SHA1)) + +Speed.#1.........: 2115.2 MH/s (283.78ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 11300 (Bitcoin/Litecoin wallet.dat) [Iterations: 200459] + +Speed.#1.........: 4224 H/s (316.44ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 11400 (SIP digest authentication (MD5)) + +Speed.#1.........: 2581.1 MH/s (465.63ms) @ Accel:4096 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 11500 (CRC32) + +Speed.#1.........: 37973.3 MH/s (62.84ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 11600 (7-Zip) [Iterations: 16384] + +Speed.#1.........: 409.8 kH/s (331.85ms) @ Accel:256 Loops:4096 Thr:128 Vec:1 + +* Hash-Mode 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) + +Speed.#1.........: 45365.1 kH/s (414.74ms) @ Accel:16 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 11750 (HMAC-Streebog-256 (key = $pass), big-endian) + +Speed.#1.........: 15309.8 kH/s (307.18ms) @ Accel:4 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11760 (HMAC-Streebog-256 (key = $salt), big-endian) + +Speed.#1.........: 20586.0 kH/s (457.10ms) @ Accel:4 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) + +Speed.#1.........: 46386.7 kH/s (405.81ms) @ Accel:16 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 11850 (HMAC-Streebog-512 (key = $pass), big-endian) + +Speed.#1.........: 13462.7 kH/s (349.52ms) @ Accel:4 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11860 (HMAC-Streebog-512 (key = $salt), big-endian) + +Speed.#1.........: 17340.2 kH/s (271.29ms) @ Accel:4 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11900 (PBKDF2-HMAC-MD5) [Iterations: 999] + +Speed.#1.........: 5376.4 kH/s (199.21ms) @ Accel:2048 Loops:999 Thr:32 Vec:1 + +* Hash-Mode 12000 (PBKDF2-HMAC-SHA1) [Iterations: 999] + +Speed.#1.........: 3041.4 kH/s (367.02ms) @ Accel:1024 Loops:999 Thr:64 Vec:1 + +* Hash-Mode 12001 (Atlassian (PBKDF2-HMAC-SHA1)) [Iterations: 9999] + +Speed.#1.........: 319.1 kH/s (367.34ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 12100 (PBKDF2-HMAC-SHA512) [Iterations: 999] + +Speed.#1.........: 403.1 kH/s (320.52ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 + +* Hash-Mode 12200 (eCryptfs) [Iterations: 65536] + +Speed.#1.........: 12904 H/s (354.93ms) @ Accel:256 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 12300 (Oracle T: Type (Oracle 12+)) [Iterations: 4095] + +Speed.#1.........: 89045 H/s (370.17ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 12400 (BSDi Crypt, Extended DES) [Iterations: 2194] + +Speed.#1.........: 1397.3 kH/s (207.46ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 12500 (RAR3-hp) [Iterations: 262144] + +Speed.#1.........: 47163 H/s (359.05ms) @ Accel:256 Loops:16384 Thr:64 Vec:1 + +* Hash-Mode 12600 (ColdFusion 10+) + +Speed.#1.........: 1901.1 MH/s (316.24ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 12700 (Blockchain, My Wallet) [Iterations: 9] + +Speed.#1.........: 5210.7 kH/s (23.35ms) @ Accel:512 Loops:9 Thr:128 Vec:1 + +* Hash-Mode 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) [Iterations: 99] + +Speed.#1.........: 10486.5 kH/s (87.85ms) @ Accel:256 Loops:99 Thr:256 Vec:1 + +* Hash-Mode 12900 (Android FDE (Samsung DEK)) [Iterations: 4095] + +Speed.#1.........: 322.4 kH/s (454.02ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 13000 (RAR5) [Iterations: 32799] + +Speed.#1.........: 40281 H/s (454.16ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 13100 (Kerberos 5, etype 23, TGS-REP) + +Speed.#1.........: 296.0 MH/s (254.39ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 13200 (AxCrypt 1) [Iterations: 10467] + +Speed.#1.........: 104.5 kH/s (255.54ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 13300 (AxCrypt 1 in-memory SHA1) + +Speed.#1.........: 7143.3 MH/s (336.21ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) [Iterations: 24569] + +Speed.#1.........: 31831 H/s (384.23ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 13500 (PeopleSoft PS_TOKEN) + +Speed.#1.........: 5563.8 MH/s (432.18ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 13600 (WinZip) [Iterations: 999] + +Speed.#1.........: 1539.0 kH/s (368.18ms) @ Accel:512 Loops:999 Thr:128 Vec:1 + +* Hash-Mode 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) [Iterations: 655330] + +Speed.#1.........: 742 H/s (134.36ms) @ Accel:4096 Loops:500 Thr:64 Vec:1 + +* Hash-Mode 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 655330] + +Speed.#1.........: 425 H/s (234.48ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 655330] + +Speed.#1.........: 296 H/s (168.27ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13721 (VeraCrypt SHA512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 804 H/s (162.22ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13722 (VeraCrypt SHA512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 400 H/s (162.98ms) @ Accel:1024 Loops:500 Thr:128 Vec:1 + +* Hash-Mode 13723 (VeraCrypt SHA512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 267 H/s (121.96ms) @ Accel:2048 Loops:250 Thr:64 Vec:1 + +* Hash-Mode 13731 (VeraCrypt Whirlpool + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 40 H/s (203.99ms) @ Accel:64 Loops:500 Thr:256 Vec:1 + +* Hash-Mode 13732 (VeraCrypt Whirlpool + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 19 H/s (207.83ms) @ Accel:32 Loops:500 Thr:256 Vec:1 + +* Hash-Mode 13733 (VeraCrypt Whirlpool + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 13 H/s (154.18ms) @ Accel:32 Loops:250 Thr:256 Vec:1 + +* Hash-Mode 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 1483 H/s (137.60ms) @ Accel:2048 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 849 H/s (120.09ms) @ Accel:4096 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 596 H/s (171.35ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 13751 (VeraCrypt SHA256 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 1255 H/s (208.27ms) @ Accel:2048 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 13752 (VeraCrypt SHA256 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 630 H/s (207.35ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13753 (VeraCrypt SHA256 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 419 H/s (155.76ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 3136 H/s (213.33ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 1575 H/s (212.33ms) @ Accel:2048 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 1051 H/s (159.03ms) @ Accel:4096 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 13771 (VeraCrypt Streebog-512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 29 H/s (138.43ms) @ Accel:512 Loops:125 Thr:64 Vec:1 + +* Hash-Mode 13772 (VeraCrypt Streebog-512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 14 H/s (138.04ms) @ Accel:512 Loops:62 Thr:64 Vec:1 + +* Hash-Mode 13773 (VeraCrypt Streebog-512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 8 H/s (120.43ms) @ Accel:256 Loops:62 Thr:64 Vec:1 + +* Hash-Mode 13781 (VeraCrypt Streebog-512 + XTS 512 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 63 H/s (165.26ms) @ Accel:64 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 13782 (VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 37 H/s (140.54ms) @ Accel:512 Loops:64 Thr:64 Vec:1 + +* Hash-Mode 13783 (VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 21 H/s (124.72ms) @ Accel:256 Loops:64 Thr:64 Vec:1 + +* Hash-Mode 13800 (Windows Phone 8+ PIN/password) + +Speed.#1.........: 822.1 MH/s (365.20ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 13900 (OpenCart) + +Speed.#1.........: 2030.9 MH/s (295.66ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 14000 (DES (PT = $salt, key = $pass)) + +Speed.#1.........: 16078.2 MH/s (148.96ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 14100 (3DES (PT = $salt, key = $pass)) + +Speed.#1.........: 2622.8 MH/s (458.88ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 14400 (sha1(CX)) + +Speed.#1.........: 370.9 MH/s (405.32ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 14500 (Linux Kernel Crypto API (2.4)) + +Speed.#1.........: 1177.8 MH/s (254.66ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 14600 (LUKS) [Iterations: 163044] + +Speed.#1.........: 8500 H/s (377.53ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 14700 (iTunes backup < 10.0) [Iterations: 9999] + +Speed.#1.........: 146.6 kH/s (377.08ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 14800 (iTunes backup >= 10.0) [Iterations: 9999999] + +Speed.#1.........: 127 H/s (211.21ms) @ Accel:4096 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 14900 (Skip32 (PT = $salt, key = $pass)) + +Speed.#1.........: 149.1 MH/s (3.62ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 15000 (FileZilla Server >= 0.9.55) + +Speed.#1.........: 921.6 MH/s (325.71ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 15100 (Juniper/NetBSD sha1crypt) [Iterations: 19999] + +Speed.#1.........: 148.1 kH/s (374.64ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 15200 (Blockchain, My Wallet, V2) [Iterations: 4999] + +Speed.#1.........: 303.6 kH/s (367.55ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 15300 (DPAPI masterkey file v1) [Iterations: 23999] + +Speed.#1.........: 66497 H/s (376.16ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 15400 (ChaCha20) + +Speed.#1.........: 3918.0 MH/s (613.85ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 15500 (JKS Java Key Store Private Keys (SHA1)) + +Speed.#1.........: 7350.5 MH/s (327.08ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1023] + +Speed.#1.........: 1262.4 kH/s (302.55ms) @ Accel:256 Loops:511 Thr:256 Vec:1 + +* Hash-Mode 15700 (Ethereum Wallet, SCRYPT) [Iterations: 262144] + +Speed.#1.........: 0 H/s (18.66ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 + +* Hash-Mode 15900 (DPAPI masterkey file v2) [Iterations: 12899] + +Speed.#1.........: 28047 H/s (370.75ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 16000 (Tripcode) + +Speed.#1.........: 164.5 MH/s (456.98ms) @ Accel:512 Loops:64 Thr:128 Vec:1 + +* Hash-Mode 16100 (TACACS+) + +Speed.#1.........: 11629.3 MH/s (206.24ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 16200 (Apple Secure Notes) [Iterations: 19999] + +Speed.#1.........: 63373 H/s (454.28ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1999] + +Speed.#1.........: 543.1 kH/s (444.21ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 16400 (CRAM-MD5 Dovecot) + +Speed.#1.........: 19343.3 MH/s (123.83ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 16500 (JWT (JSON Web Token)) + +Speed.#1.........: 625.0 MH/s (240.34ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 16600 (Electrum Wallet (Salt-Type 1-3)) + +Speed.#1.........: 543.1 MH/s (276.70ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 16700 (FileVault 2) [Iterations: 19999] + +Speed.#1.........: 60993 H/s (473.53ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 16900 (Ansible Vault) [Iterations: 9999] + +Speed.#1.........: 120.5 kH/s (455.04ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 17200 (PKZIP (Compressed)) + +* Hash-Mode 17210 (PKZIP (Uncompressed)) + +Speed.#1.........: 1235.4 MH/s (242.93ms) @ Accel:512 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 17220 (PKZIP (Compressed Multi-File)) + +* Hash-Mode 17225 (PKZIP (Mixed Multi-File)) + +* Hash-Mode 17230 (PKZIP (Mixed Multi-File Checksum-Only)) + +Speed.#1.........: 8774.3 MH/s (273.55ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 17300 (SHA3-224) + +Speed.#1.........: 509.8 MH/s (294.69ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 17400 (SHA3-256) + +Speed.#1.........: 509.6 MH/s (294.88ms) @ Accel:256 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 17500 (SHA3-384) + +Speed.#1.........: 509.7 MH/s (294.82ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 17600 (SHA3-512) + +Speed.#1.........: 509.7 MH/s (294.83ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 17700 (Keccak-224) + +Speed.#1.........: 510.3 MH/s (294.67ms) @ Accel:256 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 17800 (Keccak-256) + +Speed.#1.........: 509.7 MH/s (294.86ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 17900 (Keccak-384) + +Speed.#1.........: 509.8 MH/s (294.81ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 18000 (Keccak-512) + +Speed.#1.........: 509.7 MH/s (294.86ms) @ Accel:256 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 18100 (TOTP (HMAC-SHA1)) + +Speed.#1.........: 1616.1 MH/s (371.51ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 18200 (Kerberos 5, etype 23, AS-REP) + +Speed.#1.........: 328.9 MH/s (458.05ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 18300 (Apple File System (APFS)) [Iterations: 19999] + +Speed.#1.........: 63405 H/s (454.16ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) [Iterations: 99999] + +Speed.#1.........: 15358 H/s (376.39ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 18500 (sha1(md5(md5($pass)))) + +Speed.#1.........: 2642.5 MH/s (454.42ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) [Iterations: 1023] + +Speed.#1.........: 807.6 kH/s (375.77ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 18700 (Java Object hashCode()) + +Speed.#1.........: 40565.4 MH/s (58.76ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 18800 (Blockchain, My Wallet, Second Password (SHA256)) [Iterations: 9999] + +Speed.#1.........: 266.1 kH/s (451.94ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 18900 (Android Backup) [Iterations: 9999] + +Speed.#1.........: 159.7 kH/s (376.06ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 19000 (QNX /etc/shadow (MD5)) [Iterations: 1000] + +Speed.#1.........: 4757.7 kH/s (230.95ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 + +* Hash-Mode 19100 (QNX /etc/shadow (SHA256)) [Iterations: 1000] + +Speed.#1.........: 3034.4 kH/s (216.58ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 + +* Hash-Mode 19200 (QNX /etc/shadow (SHA512)) [Iterations: 1000] + +Speed.#1.........: 3941.1 kH/s (271.77ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 19300 (sha1($salt1.$pass.$salt2)) + +Speed.#1.........: 1022.7 MH/s (293.85ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 19500 (Ruby on Rails Restful-Authentication) + +Speed.#1.........: 200.2 MH/s (375.44ms) @ Accel:512 Loops:64 Thr:128 Vec:1 + +* Hash-Mode 19600 (Kerberos 5, etype 17, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 772.1 kH/s (376.00ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 19700 (Kerberos 5, etype 18, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 388.3 kH/s (376.05ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 19800 (Kerberos 5, etype 17, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 772.6 kH/s (376.00ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 19900 (Kerberos 5, etype 18, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 388.5 kH/s (376.05ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 20011 (DiskCryptor SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 400.2 kH/s (320.43ms) @ Accel:1024 Loops:124 Thr:64 Vec:1 + +* Hash-Mode 20012 (DiskCryptor SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 197.9 kH/s (321.00ms) @ Accel:1024 Loops:124 Thr:32 Vec:1 + +* Hash-Mode 20013 (DiskCryptor SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 134.8 kH/s (268.99ms) @ Accel:512 Loops:62 Thr:64 Vec:1 + +* Hash-Mode 20200 (Python passlib pbkdf2-sha512) [Iterations: 24999] + +Speed.#1.........: 16179 H/s (369.49ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 20300 (Python passlib pbkdf2-sha256) [Iterations: 28999] + +Speed.#1.........: 43767 H/s (473.33ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 20400 (Python passlib pbkdf2-sha1) [Iterations: 130999] + +Speed.#1.........: 24366 H/s (376.19ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 20500 (PKZIP Master Key) + +Speed.#1.........: 75061.0 MH/s (31.58ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20510 (PKZIP Master Key (6 byte optimization)) + +Speed.#1.........: 11991.4 MH/s (200.19ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20600 (Oracle Transportation Management (SHA256)) [Iterations: 999] + +Speed.#1.........: 2579.8 kH/s (440.96ms) @ Accel:2048 Loops:999 Thr:32 Vec:1 + +* Hash-Mode 20710 (sha256(sha256($pass).$salt)) + +Speed.#1.........: 884.4 MH/s (339.53ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 20711 (AuthMe sha256) + +Speed.#1.........: 883.6 MH/s (339.56ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 20720 (sha256($salt.sha256($pass))) + +Speed.#1.........: 796.2 MH/s (377.02ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 20800 (sha256(md5($pass))) + +Speed.#1.........: 2398.8 MH/s (250.15ms) @ Accel:512 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 20900 (md5(sha1($pass).md5($pass).sha1($pass))) + +Speed.#1.........: 2173.6 MH/s (276.05ms) @ Accel:512 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 21000 (BitShares v0.x - sha512(sha512_bin(pass))) + +Speed.#1.........: 345.7 MH/s (434.93ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 21100 (sha1(md5($pass.$salt))) + +Speed.#1.........: 4111.2 MH/s (292.04ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 21200 (md5(sha1($salt).md5($pass))) + +Speed.#1.........: 4089.3 MH/s (293.67ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 21300 (md5($salt.sha1($salt.$pass))) + +Speed.#1.........: 2733.2 MH/s (439.83ms) @ Accel:4096 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 21400 (sha256(sha256_bin($pass))) + +Speed.#1.........: 1455.2 MH/s (412.80ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 21500 (SolarWinds Orion) [Iterations: 999] + +Speed.#1.........: 41490 H/s (292.52ms) @ Accel:32 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 21501 (SolarWinds Orion v2) [Iterations: 999] + +Speed.#1.........: 61243 H/s (297.02ms) @ Accel:256 Loops:62 Thr:64 Vec:1 + +* Hash-Mode 21600 (Web2py pbkdf2-sha512) [Iterations: 999] + +Speed.#1.........: 345.6 kH/s (326.43ms) @ Accel:1024 Loops:124 Thr:64 Vec:1 + +* Hash-Mode 21700 (Electrum Wallet (Salt-Type 4)) [Iterations: 1023] + +Speed.#1.........: 234.0 kH/s (331.31ms) @ Accel:2048 Loops:127 Thr:32 Vec:1 + +* Hash-Mode 21800 (Electrum Wallet (Salt-Type 5)) [Iterations: 1023] + +* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095] + +Speed.#1.........: 389.5 kH/s (375.97ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 22001 (WPA-PMK-PMKID+EAPOL) [Iterations: 0] + +Speed.#1.........: 92849.8 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 22100 (BitLocker) [Iterations: 1048576] + +Speed.#1.........: 1464 H/s (349.22ms) @ Accel:4096 Loops:4096 Thr:32 Vec:1 + +* Hash-Mode 22200 (Citrix NetScaler (SHA512)) + +Speed.#1.........: 912.7 MH/s (328.96ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 22300 (sha256($salt.$pass.$salt)) + +Speed.#1.........: 2836.2 MH/s (423.58ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 22301 (Telegram Mobile App Passcode (SHA256)) + +Speed.#1.........: 2839.6 MH/s (423.26ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 22400 (AES Crypt (SHA256)) [Iterations: 8191] + +Speed.#1.........: 250.9 kH/s (243.07ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22500 (MultiBit Classic .key (MD5)) + +Speed.#1.........: 541.9 MH/s (277.41ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) [Iterations: 3999] + +Speed.#1.........: 102.8 kH/s (330.38ms) @ Accel:256 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 22700 (MultiBit HD (scrypt)) [Iterations: 16384] + +Speed.#1.........: 369 H/s (71.84ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) + +Speed.#1.........: 445.5 MH/s (337.41ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) + +Speed.#1.........: 1872.2 MH/s (320.88ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) + +Speed.#1.........: 670.3 MH/s (448.49ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) + +Speed.#1.........: 586.9 MH/s (255.90ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) + +Speed.#1.........: 577.9 MH/s (259.94ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 23001 (SecureZIP AES-128) + +Speed.#1.........: 840.4 MH/s (357.38ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 23002 (SecureZIP AES-192) + +Speed.#1.........: 594.2 MH/s (252.75ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 23003 (SecureZIP AES-256) + +Speed.#1.........: 471.1 MH/s (319.05ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 23100 (Apple Keychain) [Iterations: 999] + +Speed.#1.........: 1229.7 kH/s (252.22ms) @ Accel:256 Loops:499 Thr:256 Vec:1 + +* Hash-Mode 23200 (XMPP SCRAM PBKDF2-SHA1) [Iterations: 4095] + +Speed.#1.........: 772.6 kH/s (376.08ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 23300 (Apple iWork) [Iterations: 3999] + +Speed.#1.........: 791.2 kH/s (367.31ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23400 (Bitwarden) [Iterations: 99999] + +Speed.#1.........: 12674 H/s (454.31ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 23500 (AxCrypt 2 AES-128) [Iterations: 999] + +Speed.#1.........: 46033 H/s (279.04ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 + +* Hash-Mode 23600 (AxCrypt 2 AES-256) [Iterations: 999] + +Speed.#1.........: 23686 H/s (547.10ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 + +* Hash-Mode 23700 (RAR3-p (Uncompressed)) [Iterations: 262144] + +Speed.#1.........: 47168 H/s (358.98ms) @ Accel:512 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 23800 (RAR3-p (Compressed)) [Iterations: 262144] + +Speed.#1.........: 51137 H/s (358.91ms) @ Accel:128 Loops:16384 Thr:128 Vec:1 + +* Hash-Mode 23900 (BestCrypt v3 Volume Encryption) [Iterations: 1] + +Speed.#1.........: 1204.2 kH/s (253.58ms) @ Accel:1024 Loops:1 Thr:32 Vec:1 + +* Hash-Mode 24100 (MongoDB ServerKey SCRAM-SHA-1) [Iterations: 9999] + +Speed.#1.........: 308.5 kH/s (367.44ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24200 (MongoDB ServerKey SCRAM-SHA-256) [Iterations: 14999] + +Speed.#1.........: 88195 H/s (453.95ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 24300 (sha1($salt.sha1($pass.$salt))) + +Speed.#1.........: 2907.2 MH/s (413.13ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 771.6 kH/s (375.92ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 615.4 kH/s (473.14ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) [Iterations: 99999] + +Speed.#1.........: 1342 H/s (249.04ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 24600 (SQLCipher) [Iterations: 63999] + +Speed.#1.........: 23140 H/s (376.47ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 24700 (Stuffit5) + +Speed.#1.........: 6256.2 MH/s (384.00ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24800 (Umbraco HMAC-SHA1) + +Speed.#1.........: 1638.1 MH/s (366.83ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 24900 (Dahua Authentication MD5) + +Speed.#1.........: 12288.1 MH/s (195.28ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 155.1 kH/s (27.51ms) @ Accel:8 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 25100 (SNMPv3 HMAC-MD5-96) [Iterations: 1048576] + +Speed.#1.........: 302.7 kH/s (28.31ms) @ Accel:32 Loops:131072 Thr:128 Vec:1 + +* Hash-Mode 25200 (SNMPv3 HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 291.5 kH/s (29.38ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 25300 (MS Office 2016 - SheetProtection) [Iterations: 100000] + +Speed.#1.........: 8228 H/s (356.40ms) @ Accel:256 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) [Iterations: 70] + +Speed.#1.........: 16314.6 kH/s (30.32ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 25500 (Stargazer Stellar Wallet XLM) [Iterations: 4095] + +Speed.#1.........: 294.2 kH/s (455.00ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 25600 (bcrypt(md5($pass)) / bcryptmd5) [Iterations: 32] + +Speed.#1.........: 19183 H/s (467.79ms) @ Accel:32 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 25700 (MurmurHash) + +Speed.#1.........: 109.2 GH/s (21.56ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 25800 (bcrypt(sha1($pass)) / bcryptsha1) [Iterations: 32] + +Speed.#1.........: 19176 H/s (467.83ms) @ Accel:32 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 25900 (KNX IP Secure - Device Authentication Code) [Iterations: 65535] + +Speed.#1.........: 18381 H/s (455.16ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 26000 (Mozilla key3.db) + +Speed.#1.........: 200.0 MH/s (376.04ms) @ Accel:1024 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 26100 (Mozilla key4.db) [Iterations: 9999] + +Speed.#1.........: 121.9 kH/s (473.63ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 26200 (OpenEdge Progress Encode) + +Speed.#1.........: 507.6 MH/s (295.94ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 26300 (FortiGate256 (FortiOS256)) + +Speed.#1.........: 2017.6 MH/s (297.41ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 2046.1 MH/s (293.49ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 1776.0 MH/s (338.44ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 1434.4 MH/s (418.95ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 26500 (iPhone passcode (UID key + System Keybag)) [Iterations: 50000] + +Speed.#1.........: 19794 H/s (295.00ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 26600 (MetaMask Wallet) [Iterations: 9999] + +Speed.#1.........: 132.2 kH/s (454.17ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 26700 (SNMPv3 HMAC-SHA224-128) [Iterations: 1048576] + +Speed.#1.........: 134.2 kH/s (66.33ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 26800 (SNMPv3 HMAC-SHA256-192) [Iterations: 1048576] + +Speed.#1.........: 133.7 kH/s (66.53ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 26900 (SNMPv3 HMAC-SHA384-256) [Iterations: 1048576] + +Speed.#1.........: 87159 H/s (97.91ms) @ Accel:16 Loops:262144 Thr:128 Vec:1 + +* Hash-Mode 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) [Iterations: 0] + +Speed.#1.........: 45941.3 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 27100 (NetNTLMv2 (NT)) [Iterations: 0] + +Speed.#1.........: 44244.3 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) + +Speed.#1.........: 7270.4 MH/s (330.41ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 27300 (SNMPv3 HMAC-SHA512-384) [Iterations: 1048576] + +Speed.#1.........: 86992 H/s (98.21ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 + +* Hash-Mode 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) [Iterations: 9999] + +Speed.#1.........: 146.6 kH/s (377.06ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) [Iterations: 259999] + +Speed.#1.........: 4004 H/s (474.06ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) [Iterations: 159999] + +Speed.#1.........: 3107 H/s (474.03ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 99999 (Plaintext) + +Speed.#1.........: 31334.6 MH/s (76.24ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 + +Started: Sat Mar 19 00:28:14 2022 + +Stopped: Sat Mar 19 03:09:27 2022 \ No newline at end of file diff --git a/tools/benchmarking/g4dn-benchmarks.txt b/tools/benchmarking/g4dn-benchmarks.txt new file mode 100644 index 0000000..5cd1530 --- /dev/null +++ b/tools/benchmarking/g4dn-benchmarks.txt @@ -0,0 +1,1310 @@ +hashcat (v6.1.1) starting in benchmark mode... + +CUDA API (CUDA 11.0) +==================== +* Device #1: Tesla T4, 15007/15109 MB, 40MCU + +OpenCL API (OpenCL 1.2 CUDA 11.0.228) - Platform #1 [NVIDIA Corporation] +======================================================================== +* Device #2: Tesla T4, skipped + +Benchmark relevant options: +=========================== +* --benchmark-all +* --optimized-kernel-enable +* --workload-profile=4 + +Hashmode: 0 - MD5 + +Speed.#1.........: 21734.7 MH/s (123.43ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 10 - md5($pass.$salt) + +Speed.#1.........: 21709.2 MH/s (123.48ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11 - Joomla < 2.5.18 + +Speed.#1.........: 20765.0 MH/s (129.08ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 12 - PostgreSQL + +Speed.#1.........: 20711.3 MH/s (129.51ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 20 - md5($salt.$pass) + +Speed.#1.........: 12422.8 MH/s (215.99ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 21 - osCommerce, xt:Commerce + +Speed.#1.........: 12462.3 MH/s (215.22ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 22 - Juniper NetScreen/SSG (ScreenOS) + +Speed.#1.........: 12444.7 MH/s (215.62ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 23 - Skype + +Speed.#1.........: 12397.5 MH/s (216.45ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 30 - md5(utf16le($pass).$salt) + +Speed.#1.........: 20516.6 MH/s (130.69ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 40 - md5($salt.utf16le($pass)) + +Speed.#1.........: 12382.1 MH/s (216.62ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 50 - HMAC-MD5 (key = $pass) + +Speed.#1.........: 3621.4 MH/s (370.43ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 60 - HMAC-MD5 (key = $salt) + +Speed.#1.........: 7738.8 MH/s (346.77ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 100 - SHA1 + +Speed.#1.........: 7506.4 MH/s (357.41ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 101 - nsldap, SHA-1(Base64), Netscape LDAP SHA + +Speed.#1.........: 7475.3 MH/s (358.91ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 110 - sha1($pass.$salt) + +Speed.#1.........: 7531.0 MH/s (356.25ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 111 - nsldaps, SSHA-1(Base64), Netscape LDAP SSHA + +Speed.#1.........: 7433.1 MH/s (361.04ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 112 - Oracle S: Type (Oracle 11+) + +Speed.#1.........: 7489.2 MH/s (358.34ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 120 - sha1($salt.$pass) + +Speed.#1.........: 5678.3 MH/s (472.65ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 121 - SMF (Simple Machines Forum) > v1.1 + +Speed.#1.........: 5658.8 MH/s (474.18ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 122 - macOS v10.4, macOS v10.5, MacOS v10.6 + +Speed.#1.........: 5630.3 MH/s (238.20ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 124 - Django (SHA-1) + +Speed.#1.........: 5605.0 MH/s (478.74ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 125 - ArubaOS + +Speed.#1.........: 5598.8 MH/s (479.26ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 130 - sha1(utf16le($pass).$salt) + +Speed.#1.........: 7517.3 MH/s (356.90ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 131 - MSSQL (2000) + +Speed.#1.........: 7551.0 MH/s (355.35ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 132 - MSSQL (2005) + +Speed.#1.........: 7582.5 MH/s (353.90ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 133 - PeopleSoft + +Speed.#1.........: 7524.8 MH/s (356.52ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 140 - sha1($salt.utf16le($pass)) + +Speed.#1.........: 5801.7 MH/s (462.49ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 141 - Episerver 6.x < .NET 4 + +Speed.#1.........: 5810.0 MH/s (461.91ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 150 - HMAC-SHA1 (key = $pass) + +Speed.#1.........: 1676.4 MH/s (400.12ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 160 - HMAC-SHA1 (key = $salt) + +Speed.#1.........: 3151.0 MH/s (425.77ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 200 - MySQL323 + +Speed.#1.........: 56287.8 MH/s (47.61ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 300 - MySQL4.1/MySQL5 + +Speed.#1.........: 3259.8 MH/s (411.62ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 400 - phpass (Iterations: 2048) + +Speed.#1.........: 6316.5 kH/s (200.95ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 500 - md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) (Iterations: 1000) + +Speed.#1.........: 10537.8 kH/s (237.47ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 501 - Juniper IVE (Iterations: 1000) + +Speed.#1.........: 10510.0 kH/s (238.30ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 600 - BLAKE2b-512 + +Speed.#1.........: 1725.8 MH/s (388.65ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 900 - MD4 + +Speed.#1.........: 39075.8 MH/s (68.52ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1000 - NTLM + +Speed.#1.........: 39236.1 MH/s (68.33ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1100 - Domain Cached Credentials (DCC), MS Cache + +Speed.#1.........: 10325.2 MH/s (259.79ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1300 - SHA2-224 + +Speed.#1.........: 3137.5 MH/s (427.64ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1400 - SHA2-256 + +Speed.#1.........: 3211.8 MH/s (417.79ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1410 - sha256($pass.$salt) + +Speed.#1.........: 3205.9 MH/s (418.48ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1411 - SSHA-256(Base64), LDAP {SSHA256} + +Speed.#1.........: 3205.1 MH/s (418.57ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1420 - sha256($salt.$pass) + +Speed.#1.........: 2865.3 MH/s (468.34ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1421 - hMailServer + +Speed.#1.........: 2867.2 MH/s (467.93ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1430 - sha256(utf16le($pass).$salt) + +Speed.#1.........: 3187.7 MH/s (420.96ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1440 - sha256($salt.utf16le($pass)) + +Speed.#1.........: 2856.7 MH/s (469.69ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1441 - Episerver 6.x >= .NET 4 + +Speed.#1.........: 2853.3 MH/s (470.21ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1450 - HMAC-SHA256 (key = $pass) + +Speed.#1.........: 577.3 MH/s (290.41ms) @ Accel:8 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1460 - HMAC-SHA256 (key = $salt) + +Speed.#1.........: 1286.8 MH/s (260.68ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +Hashmode: 1500 - descrypt, DES (Unix), Traditional DES + +Speed.#1.........: 884.7 MH/s (379.05ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +Hashmode: 1600 - Apache $apr1$ MD5, md5apr1, MD5 (APR) (Iterations: 1000) + +Speed.#1.........: 10190.5 kH/s (245.99ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 1700 - SHA2-512 + +Speed.#1.........: 1002.9 MH/s (334.48ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1710 - sha512($pass.$salt) + +Speed.#1.........: 1012.7 MH/s (331.22ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1711 - SSHA-512(Base64), LDAP {SSHA512} + +Speed.#1.........: 1015.7 MH/s (330.16ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1720 - sha512($salt.$pass) + +Speed.#1.........: 975.1 MH/s (344.01ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1722 - macOS v10.7 + +Speed.#1.........: 976.5 MH/s (343.52ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1730 - sha512(utf16le($pass).$salt) + +Speed.#1.........: 1030.4 MH/s (325.56ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1731 - MSSQL (2012, 2014) + +Speed.#1.........: 1030.4 MH/s (325.57ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1740 - sha512($salt.utf16le($pass)) + +Speed.#1.........: 982.3 MH/s (341.49ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1750 - HMAC-SHA512 (key = $pass) + +Speed.#1.........: 221.7 MH/s (378.26ms) @ Accel:2 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1760 - HMAC-SHA512 (key = $salt) + +Speed.#1.........: 463.1 MH/s (362.17ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1800 - sha512crypt $6$, SHA512 (Unix) (Iterations: 5000) + +Speed.#1.........: 125.8 kH/s (526.06ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +Hashmode: 2000 - STDOUT + +Speed.#1.........: 27883.5 GH/s (0.02ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2100 - Domain Cached Credentials 2 (DCC2), MS Cache 2 (Iterations: 10239) + +Speed.#1.........: 299.8 kH/s (435.11ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 2400 - Cisco-PIX MD5 + +Speed.#1.........: 15334.5 MH/s (174.87ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2410 - Cisco-ASA MD5 + +Speed.#1.........: 13909.5 MH/s (192.81ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2500 - WPA-EAPOL-PBKDF2 (Iterations: 4095) + +Speed.#1.........: 369.6 kH/s (441.83ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 2501 - WPA-EAPOL-PMK (Iterations: 0) + +Speed.#1.........: 162.7 MH/s (0.00ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2600 - md5(md5($pass)) + +Speed.#1.........: 6529.3 MH/s (410.93ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2611 - vBulletin < v3.8.5 + +Speed.#1.........: 6511.9 MH/s (412.13ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2612 - PHPS + +Speed.#1.........: 6500.6 MH/s (412.85ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2711 - vBulletin >= v3.8.5 + +Speed.#1.........: 4557.8 MH/s (294.29ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 2811 - MyBB 1.2+, IPB2+ (Invision Power Board) + +Speed.#1.........: 4921.4 MH/s (272.64ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 3000 - LM + +Speed.#1.........: 21921.0 MH/s (122.25ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +Hashmode: 3100 - Oracle H: Type (Oracle 7+) + +Speed.#1.........: 354.8 MH/s (236.38ms) @ Accel:32 Loops:64 Thr:1024 Vec:1 + +Hashmode: 3200 - bcrypt $2*$, Blowfish (Unix) (Iterations: 32) + +Speed.#1.........: 26886 H/s (185.97ms) @ Accel:8 Loops:32 Thr:16 Vec:1 + +Hashmode: 3710 - md5($salt.md5($pass)) + +Speed.#1.........: 6016.9 MH/s (445.93ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 3711 - MediaWiki B type + +Speed.#1.........: 6003.3 MH/s (447.06ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 3800 - md5($salt.$pass.$salt) + +Speed.#1.........: 12126.4 MH/s (221.29ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 3910 - md5(md5($pass).md5($salt)) + +Speed.#1.........: 4507.3 MH/s (297.57ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4010 - md5($salt.md5($salt.$pass)) + +Speed.#1.........: 5308.2 MH/s (252.69ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4110 - md5($salt.md5($pass.$salt)) + +Speed.#1.........: 5642.8 MH/s (475.62ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4300 - md5(strtoupper(md5($pass))) + +Speed.#1.........: 6294.6 MH/s (426.36ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4400 - md5(sha1($pass)) + +Speed.#1.........: 3834.2 MH/s (349.97ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4500 - sha1(sha1($pass)) + +Speed.#1.........: 2715.6 MH/s (246.95ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 4520 - sha1($salt.sha1($pass)) + +Speed.#1.........: 1624.6 MH/s (412.89ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4521 - Redmine + +Speed.#1.........: 1616.2 MH/s (415.04ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4522 - PunBB + +Speed.#1.........: 2476.1 MH/s (270.94ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4700 - sha1(md5($pass)) + +Speed.#1.........: 3873.5 MH/s (346.31ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4710 - sha1(md5($pass).$salt) + +Speed.#1.........: 3638.6 MH/s (368.78ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4711 - Huawei sha1(md5($pass).$salt) + +Speed.#1.........: 3639.3 MH/s (368.72ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 4800 - iSCSI CHAP authentication, MD5(CHAP) + +Speed.#1.........: 12855.3 MH/s (208.61ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 4900 - sha1($salt.$pass.$salt) + +Speed.#1.........: 5302.9 MH/s (253.03ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 5100 - Half MD5 + +Speed.#1.........: 13318.1 MH/s (201.47ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 5200 - Password Safe v3 (Iterations: 2049) + +Speed.#1.........: 1191.9 kH/s (218.67ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 5300 - IKE-PSK MD5 + +Speed.#1.........: 785.9 MH/s (426.86ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 5400 - IKE-PSK SHA1 + +Speed.#1.........: 330.0 MH/s (254.05ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 5500 - NetNTLMv1 / NetNTLMv1+ESS + +Speed.#1.........: 20893.2 MH/s (128.40ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 5600 - NetNTLMv2 + +Speed.#1.........: 1491.5 MH/s (449.84ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 5700 - Cisco-IOS type 4 (SHA256) + +Speed.#1.........: 2980.6 MH/s (450.21ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 5800 - Samsung Android Password/PIN (Iterations: 1023) + +Speed.#1.........: 4786.1 kH/s (178.69ms) @ Accel:64 Loops:511 Thr:1024 Vec:1 + +Hashmode: 6000 - RIPEMD-160 + +Speed.#1.........: 4553.7 MH/s (294.66ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 6100 - Whirlpool + +Speed.#1.........: 272.7 MH/s (307.54ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 6211 - TrueCrypt RIPEMD160 + XTS 512 bit (Iterations: 1999) + +Speed.#1.........: 253.9 kH/s (298.87ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 6212 - TrueCrypt RIPEMD160 + XTS 1024 bit (Iterations: 1999) + +Speed.#1.........: 145.8 kH/s (279.53ms) @ Accel:32 Loops:64 Thr:1024 Vec:1 + +Hashmode: 6213 - TrueCrypt RIPEMD160 + XTS 1536 bit (Iterations: 1999) + +Speed.#1.........: 106.2 kH/s (388.08ms) @ Accel:16 Loops:128 Thr:1024 Vec:1 + +Hashmode: 6221 - TrueCrypt SHA512 + XTS 512 bit (Iterations: 999) + +Speed.#1.........: 387.4 kH/s (375.63ms) @ Accel:4 Loops:999 Thr:1024 Vec:1 + +Hashmode: 6222 - TrueCrypt SHA512 + XTS 1024 bit (Iterations: 999) + +Speed.#1.........: 191.7 kH/s (245.82ms) @ Accel:4 Loops:499 Thr:1024 Vec:1 + +Hashmode: 6223 - TrueCrypt SHA512 + XTS 1536 bit (Iterations: 999) + +Speed.#1.........: 128.3 kH/s (217.80ms) @ Accel:4 Loops:249 Thr:1024 Vec:1 + +Hashmode: 6231 - TrueCrypt Whirlpool + XTS 512 bit (Iterations: 999) + +Speed.#1.........: 35068 H/s (1154.06ms) @ Accel:8 Loops:124 Thr:1024 Vec:1 + +Hashmode: 6232 - TrueCrypt Whirlpool + XTS 1024 bit (Iterations: 999) + +Speed.#1.........: 17539 H/s (1154.84ms) @ Accel:4 Loops:124 Thr:1024 Vec:1 + +Hashmode: 6233 - TrueCrypt Whirlpool + XTS 1536 bit (Iterations: 999) + +Speed.#1.........: 11687 H/s (1731.87ms) @ Accel:4 Loops:124 Thr:1024 Vec:1 + +Hashmode: 6241 - TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode (Iterations: 999) + +Speed.#1.........: 500.3 kH/s (224.45ms) @ Accel:16 Loops:249 Thr:1024 Vec:1 + +Hashmode: 6242 - TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode (Iterations: 999) + +Speed.#1.........: 320.9 kH/s (492.31ms) @ Accel:32 Loops:124 Thr:1024 Vec:1 + +Hashmode: 6243 - TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode (Iterations: 999) + +Speed.#1.........: 178.9 kH/s (320.66ms) @ Accel:16 Loops:124 Thr:1024 Vec:1 + +Hashmode: 6300 - AIX {smd5} (Iterations: 1000) + +Speed.#1.........: 10384.9 kH/s (241.40ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 6400 - AIX {ssha256} (Iterations: 63) + +Speed.#1.........: 16968.0 kH/s (136.86ms) @ Accel:64 Loops:63 Thr:1024 Vec:1 + +Hashmode: 6500 - AIX {ssha512} (Iterations: 63) + +Speed.#1.........: 6315.0 kH/s (360.57ms) @ Accel:64 Loops:63 Thr:1024 Vec:1 + +Hashmode: 6600 - 1Password, agilekeychain (Iterations: 999) + +Speed.#1.........: 3009.3 kH/s (283.52ms) @ Accel:64 Loops:499 Thr:1024 Vec:1 + +Hashmode: 6700 - AIX {ssha1} (Iterations: 63) + +Speed.#1.........: 41450.8 kH/s (48.40ms) @ Accel:64 Loops:63 Thr:1024 Vec:1 + +Hashmode: 6800 - LastPass + LastPass sniffed (Iterations: 499) + +Speed.#1.........: 2200.9 kH/s (191.61ms) @ Accel:32 Loops:249 Thr:1024 Vec:1 + +Hashmode: 6900 - GOST R 34.11-94 + +Speed.#1.........: 214.7 MH/s (195.27ms) @ Accel:64 Loops:16 Thr:1024 Vec:1 + +Hashmode: 7000 - FortiGate (FortiOS) + +Speed.#1.........: 6685.7 MH/s (401.31ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 7100 - macOS v10.8+ (PBKDF2-SHA512) (Iterations: 1023) + +Speed.#1.........: 452.9 kH/s (357.19ms) @ Accel:4 Loops:1023 Thr:1024 Vec:1 + +Hashmode: 7200 - GRUB 2 (Iterations: 1023) + +Speed.#1.........: 449.1 kH/s (360.16ms) @ Accel:4 Loops:1023 Thr:1024 Vec:1 + +Hashmode: 7300 - IPMI2 RAKP HMAC-SHA1 + +Speed.#1.........: 964.1 MH/s (347.94ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 7400 - sha256crypt $5$, SHA256 (Unix) (Iterations: 5000) + +Speed.#1.........: 277.1 kH/s (479.95ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 7401 - MySQL $A$ (sha256crypt) (Iterations: 5000) + +Speed.#1.........: 259.9 kH/s (249.68ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 7500 - Kerberos 5, etype 23, AS-REQ Pre-Auth + +Speed.#1.........: 319.4 MH/s (262.54ms) @ Accel:128 Loops:256 Thr:64 Vec:1 + +Hashmode: 7700 - SAP CODVN B (BCODE) + +Speed.#1.........: 1546.2 MH/s (433.92ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 7701 - SAP CODVN B (BCODE) from RFC_READ_TABLE + +Speed.#1.........: 1565.6 MH/s (428.57ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 7800 - SAP CODVN F/G (PASSCODE) + +Speed.#1.........: 1038.8 MH/s (322.82ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 7801 - SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE + +Speed.#1.........: 977.0 MH/s (343.35ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 7900 - Drupal7 (Iterations: 16384) + +Speed.#1.........: 55069 H/s (371.09ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 8000 - Sybase ASE + +Speed.#1.........: 396.7 MH/s (422.79ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 8100 - Citrix NetScaler (SHA1) + +Speed.#1.........: 6436.2 MH/s (416.96ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 8200 - 1Password, cloudkeychain (Iterations: 39999) + +Speed.#1.........: 11407 H/s (367.29ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 8300 - DNSSEC (NSEC3) + +Speed.#1.........: 2716.6 MH/s (246.86ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 8400 - WBB3 (Woltlab Burning Board) + +Speed.#1.........: 1138.2 MH/s (294.71ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 8500 - RACF + +Speed.#1.........: 2134.4 MH/s (314.32ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 8600 - Lotus Notes/Domino 5 + +Speed.#1.........: 184.0 MH/s (455.68ms) @ Accel:64 Loops:32 Thr:1024 Vec:1 + +Hashmode: 8700 - Lotus Notes/Domino 6 + +Speed.#1.........: 60045.0 kH/s (349.18ms) @ Accel:2 Loops:256 Thr:1024 Vec:1 + +Hashmode: 8800 - Android FDE <= 4.3 (Iterations: 1999) + +Speed.#1.........: 732.0 kH/s (442.61ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 8900 - scrypt (Iterations: 1) + +Speed.#1.........: 319.0 kH/s (31.59ms) @ Accel:16 Loops:1 Thr:16 Vec:1 + +Hashmode: 9000 - Password Safe v2 (Iterations: 1000) + +Speed.#1.........: 436.4 kH/s (179.24ms) @ Accel:256 Loops:1000 Thr:12 Vec:1 + +Hashmode: 9100 - Lotus Notes/Domino 8 (Iterations: 4999) + +Speed.#1.........: 578.0 kH/s (457.84ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 9200 - Cisco-IOS $8$ (PBKDF2-SHA256) (Iterations: 19999) + +Speed.#1.........: 59050 H/s (283.61ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 9300 - Cisco-IOS $9$ (scrypt) (Iterations: 1) + +Speed.#1.........: 24054 H/s (212.38ms) @ Accel:16 Loops:1 Thr:8 Vec:1 + +Hashmode: 9400 - MS Office 2007 (Iterations: 50000) + +Speed.#1.........: 119.1 kH/s (449.73ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 9500 - MS Office 2010 (Iterations: 100000) + +Speed.#1.........: 59214 H/s (452.13ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 9600 - MS Office 2013 (Iterations: 100000) + +Speed.#1.........: 8952 H/s (374.53ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 9700 - MS Office <= 2003 $0/$1, MD5 + RC4 + +Speed.#1.........: 267.9 MH/s (313.02ms) @ Accel:64 Loops:512 Thr:64 Vec:1 + +Hashmode: 9710 - MS Office <= 2003 $0/$1, MD5 + RC4, collider #1 + +Speed.#1.........: 309.7 MH/s (270.80ms) @ Accel:256 Loops:128 Thr:64 Vec:1 + +Hashmode: 9720 - MS Office <= 2003 $0/$1, MD5 + RC4, collider #2 + +Speed.#1.........: 1727.8 MH/s (388.31ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 9800 - MS Office <= 2003 $3/$4, SHA1 + RC4 + +Speed.#1.........: 309.9 MH/s (270.57ms) @ Accel:128 Loops:256 Thr:64 Vec:1 + +Hashmode: 9810 - MS Office <= 2003 $3, SHA1 + RC4, collider #1 + +Speed.#1.........: 337.5 MH/s (248.47ms) @ Accel:256 Loops:128 Thr:64 Vec:1 + +Hashmode: 9820 - MS Office <= 2003 $3, SHA1 + RC4, collider #2 + +Speed.#1.........: 2865.0 MH/s (468.24ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 9900 - Radmin2 + +Speed.#1.........: 7499.2 MH/s (357.85ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 10000 - Django (PBKDF2-SHA256) (Iterations: 9999) + +Speed.#1.........: 114.0 kH/s (293.78ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 10100 - SipHash + +Speed.#1.........: 23461.5 MH/s (114.34ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 10200 - CRAM-MD5 + +Speed.#1.........: 3354.3 MH/s (400.05ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 10300 - SAP CODVN H (PWDSALTEDHASH) iSSHA-1 (Iterations: 1023) + +Speed.#1.........: 4690.9 kH/s (181.98ms) @ Accel:64 Loops:511 Thr:1024 Vec:1 + +Hashmode: 10400 - PDF 1.1 - 1.3 (Acrobat 2 - 4) + +Speed.#1.........: 351.2 MH/s (238.75ms) @ Accel:128 Loops:256 Thr:64 Vec:1 + +Hashmode: 10410 - PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1 + +Speed.#1.........: 372.5 MH/s (450.32ms) @ Accel:256 Loops:256 Thr:64 Vec:1 + +Hashmode: 10420 - PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2 + +Speed.#1.........: 6454.8 MH/s (415.68ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 10500 - PDF 1.4 - 1.6 (Acrobat 5 - 8) (Iterations: 70) + +Speed.#1.........: 16650.8 kH/s (145.29ms) @ Accel:1024 Loops:70 Thr:64 Vec:1 + +Hashmode: 10600 - PDF 1.7 Level 3 (Acrobat 9) + +Speed.#1.........: 2987.4 MH/s (449.09ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 10700 - PDF 1.7 Level 8 (Acrobat 10 - 11) (Iterations: 64) + +Speed.#1.........: 37644 H/s (543.86ms) @ Accel:2 Loops:16 Thr:1024 Vec:1 + +Hashmode: 10800 - SHA2-384 + +Speed.#1.........: 937.3 MH/s (357.89ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 10900 - PBKDF2-HMAC-SHA256 (Iterations: 999) + +Speed.#1.........: 1116.1 kH/s (193.07ms) @ Accel:16 Loops:499 Thr:1024 Vec:1 + +Hashmode: 10901 - RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256) (Iterations: 8191) + +Speed.#1.........: 137.5 kH/s (297.39ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 11000 - PrestaShop + +Speed.#1.........: 7792.2 MH/s (344.41ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11100 - PostgreSQL CRAM (MD5) + +Speed.#1.........: 5848.3 MH/s (458.81ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11200 - MySQL CRAM (SHA1) + +Speed.#1.........: 1779.0 MH/s (377.03ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11300 - Bitcoin/Litecoin wallet.dat (Iterations: 200459) + +Speed.#1.........: 4576 H/s (365.46ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11400 - SIP digest authentication (MD5) + +Speed.#1.........: 2840.5 MH/s (472.41ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 11500 - CRC32 + +Speed.#1.........: 6750.9 MH/s (198.74ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 11600 - 7-Zip (Iterations: 16384) + +Speed.#1.........: 312.7 kH/s (248.73ms) @ Accel:8 Loops:4096 Thr:1024 Vec:1 + +Hashmode: 11700 - GOST R 34.11-2012 (Streebog) 256-bit, big-endian + +Speed.#1.........: 43457.0 kH/s (241.22ms) @ Accel:2 Loops:128 Thr:1024 Vec:1 + +Hashmode: 11750 - HMAC-Streebog-256 (key = $pass), big-endian + +Speed.#1.........: 15520.5 kH/s (337.72ms) @ Accel:4 Loops:32 Thr:1024 Vec:1 + +Hashmode: 11760 - HMAC-Streebog-256 (key = $salt), big-endian + +Speed.#1.........: 21447.0 kH/s (244.28ms) @ Accel:1 Loops:128 Thr:1024 Vec:1 + +Hashmode: 11800 - GOST R 34.11-2012 (Streebog) 512-bit, big-endian + +Speed.#1.........: 43430.6 kH/s (241.26ms) @ Accel:2 Loops:128 Thr:1024 Vec:1 + +Hashmode: 11850 - HMAC-Streebog-512 (key = $pass), big-endian + +Speed.#1.........: 13580.1 kH/s (385.89ms) @ Accel:8 Loops:16 Thr:1024 Vec:1 + +Hashmode: 11860 - HMAC-Streebog-512 (key = $salt), big-endian + +Speed.#1.........: 17859.7 kH/s (293.48ms) @ Accel:2 Loops:64 Thr:1024 Vec:1 + +Hashmode: 11900 - PBKDF2-HMAC-MD5 (Iterations: 999) + +Speed.#1.........: 7318.3 kH/s (335.85ms) @ Accel:64 Loops:999 Thr:1024 Vec:1 + +Hashmode: 12000 - PBKDF2-HMAC-SHA1 (Iterations: 999) + +Speed.#1.........: 2911.4 kH/s (290.29ms) @ Accel:64 Loops:499 Thr:1024 Vec:1 + +Hashmode: 12001 - Atlassian (PBKDF2-HMAC-SHA1) (Iterations: 9999) + +Speed.#1.........: 298.8 kH/s (445.75ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 12100 - PBKDF2-HMAC-SHA512 (Iterations: 999) + +Speed.#1.........: 456.4 kH/s (354.19ms) @ Accel:4 Loops:999 Thr:1024 Vec:1 + +Hashmode: 12200 - eCryptfs (Iterations: 65536) + +Speed.#1.........: 14068 H/s (363.64ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 12300 - Oracle T: Type (Oracle 12+) (Iterations: 4095) + +Speed.#1.........: 111.1 kH/s (367.42ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 12400 - BSDi Crypt, Extended DES (Iterations: 2194) + +Speed.#1.........: 1702.8 kH/s (506.46ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 12500 - RAR3-hp (Iterations: 262144) + +Speed.#1.........: 32898 H/s (311.14ms) @ Accel:4 Loops:16384 Thr:1024 Vec:1 + +Hashmode: 12600 - ColdFusion 10+ + +Speed.#1.........: 1752.1 MH/s (382.81ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 12700 - Blockchain, My Wallet (Iterations: 9) + +Speed.#1.........: 67654.2 kH/s (15.35ms) @ Accel:64 Loops:9 Thr:1024 Vec:1 + +Hashmode: 12800 - MS-AzureSync PBKDF2-HMAC-SHA256 (Iterations: 99) + +Speed.#1.........: 8748.5 kH/s (228.27ms) @ Accel:64 Loops:99 Thr:1024 Vec:1 + +Hashmode: 12900 - Android FDE (Samsung DEK) (Iterations: 4095) + +Speed.#1.........: 276.4 kH/s (295.01ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 13000 - RAR5 (Iterations: 32799) + +Speed.#1.........: 34723 H/s (294.28ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 13100 - Kerberos 5, etype 23, TGS-REP + +Speed.#1.........: 319.0 MH/s (262.88ms) @ Accel:128 Loops:256 Thr:64 Vec:1 + +Hashmode: 13200 - AxCrypt (Iterations: 10467) + +Speed.#1.........: 95778 H/s (1333.95ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 13300 - AxCrypt in-memory SHA1 + +Speed.#1.........: 7025.9 MH/s (381.98ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 13400 - KeePass 1 (AES/Twofish) and KeePass 2 (AES) (Iterations: 24569) + +Speed.#1.........: 29268 H/s (932.43ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 13500 - PeopleSoft PS_TOKEN + +Speed.#1.........: 5451.3 MH/s (246.03ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 13600 - WinZip (Iterations: 999) + +Speed.#1.........: 2871.7 kH/s (424.37ms) @ Accel:32 Loops:999 Thr:1024 Vec:1 + +Hashmode: 13711 - VeraCrypt RIPEMD160 + XTS 512 bit (Iterations: 655330) + +Speed.#1.........: 879 H/s (140.92ms) @ Accel:16 Loops:250 Thr:1024 Vec:1 + +Hashmode: 13712 - VeraCrypt RIPEMD160 + XTS 1024 bit (Iterations: 655330) + +Speed.#1.........: 478 H/s (253.73ms) @ Accel:32 Loops:125 Thr:1024 Vec:1 + +Hashmode: 13713 - VeraCrypt RIPEMD160 + XTS 1536 bit (Iterations: 655330) + +Speed.#1.........: 314 H/s (189.51ms) @ Accel:32 Loops:62 Thr:1024 Vec:1 + +Hashmode: 13721 - VeraCrypt SHA512 + XTS 512 bit (Iterations: 499999) + +Speed.#1.........: 914 H/s (178.98ms) @ Accel:8 Loops:500 Thr:1024 Vec:1 + +Hashmode: 13722 - VeraCrypt SHA512 + XTS 1024 bit (Iterations: 499999) + +Speed.#1.........: 439 H/s (186.34ms) @ Accel:4 Loops:500 Thr:1024 Vec:1 + +Hashmode: 13723 - VeraCrypt SHA512 + XTS 1536 bit (Iterations: 499999) + +Speed.#1.........: 291 H/s (140.57ms) @ Accel:4 Loops:250 Thr:1024 Vec:1 + +Hashmode: 13731 - VeraCrypt Whirlpool + XTS 512 bit (Iterations: 499999) + +Speed.#1.........: 70 H/s (582.15ms) @ Accel:2 Loops:500 Thr:1024 Vec:1 + +Hashmode: 13732 - VeraCrypt Whirlpool + XTS 1024 bit (Iterations: 499999) + +Speed.#1.........: 35 H/s (579.63ms) @ Accel:2 Loops:250 Thr:1024 Vec:1 + +Hashmode: 13733 - VeraCrypt Whirlpool + XTS 1536 bit (Iterations: 499999) + +Speed.#1.........: 23 H/s (869.83ms) @ Accel:4 Loops:125 Thr:1024 Vec:1 + +Hashmode: 13741 - VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode (Iterations: 327660) + +Speed.#1.........: 1769 H/s (143.28ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 13742 - VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode (Iterations: 327660) + +Speed.#1.........: 969 H/s (256.54ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 + +Hashmode: 13743 - VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode (Iterations: 327660) + +Speed.#1.........: 638 H/s (192.19ms) @ Accel:32 Loops:64 Thr:1024 Vec:1 + +Hashmode: 13751 - VeraCrypt SHA256 + XTS 512 bit (Iterations: 499999) + +Speed.#1.........: 1163 H/s (138.26ms) @ Accel:32 Loops:125 Thr:1024 Vec:1 + +Hashmode: 13752 - VeraCrypt SHA256 + XTS 1024 bit (Iterations: 499999) + +Speed.#1.........: 634 H/s (254.73ms) @ Accel:16 Loops:250 Thr:1024 Vec:1 + +Hashmode: 13753 - VeraCrypt SHA256 + XTS 1536 bit (Iterations: 499999) + +Speed.#1.........: 412 H/s (195.11ms) @ Accel:16 Loops:125 Thr:1024 Vec:1 + +Hashmode: 13761 - VeraCrypt SHA256 + XTS 512 bit + boot-mode (Iterations: 199999) + +Speed.#1.........: 2890 H/s (142.39ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 + +Hashmode: 13762 - VeraCrypt SHA256 + XTS 1024 bit + boot-mode (Iterations: 199999) + +Speed.#1.........: 1576 H/s (132.10ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 13763 - VeraCrypt SHA256 + XTS 1536 bit + boot-mode (Iterations: 199999) + +Speed.#1.........: 1015 H/s (202.41ms) @ Accel:16 Loops:128 Thr:1024 Vec:1 + +Hashmode: 13771 - VeraCrypt Streebog-512 + XTS 512 bit (Iterations: 499999) + +Speed.#1.........: 27 H/s (754.19ms) @ Accel:2 Loops:250 Thr:1024 Vec:1 + +Hashmode: 13772 - VeraCrypt Streebog-512 + XTS 1024 bit (Iterations: 499999) + +Speed.#1.........: 13 H/s (753.11ms) @ Accel:4 Loops:62 Thr:1024 Vec:1 + +Hashmode: 13773 - VeraCrypt Streebog-512 + XTS 1536 bit (Iterations: 499999) + +Speed.#1.........: 9 H/s (570.15ms) @ Accel:1 Loops:125 Thr:1024 Vec:1 + +Hashmode: 13800 - Windows Phone 8+ PIN/password + +Speed.#1.........: 782.4 MH/s (428.66ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 + +Hashmode: 13900 - OpenCart + +Speed.#1.........: 1766.3 MH/s (379.75ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 14000 - DES (PT = $salt, key = $pass) + +Speed.#1.........: 21208.7 MH/s (126.37ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +Hashmode: 14100 - 3DES (PT = $salt, key = $pass) + +Speed.#1.........: 2209.8 MH/s (303.50ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 14400 - sha1(CX) + +Speed.#1.........: 347.7 MH/s (241.05ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 14600 - LUKS (Iterations: 163044) + +Speed.#1.........: 9401 H/s (436.52ms) @ Accel:512 Loops:512 Thr:64 Vec:1 + +Hashmode: 14700 - iTunes backup < 10.0 (Iterations: 9999) + +Speed.#1.........: 151.2 kH/s (442.14ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 14800 - iTunes backup >= 10.0 (Iterations: 9999999) + +Speed.#1.........: 122 H/s (273.61ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +Hashmode: 14900 - Skip32 (PT = $salt, key = $pass) + +Speed.#1.........: 4262.3 MH/s (7.79ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 15000 - FileZilla Server >= 0.9.55 + +Speed.#1.........: 954.3 MH/s (351.40ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 15100 - Juniper/NetBSD sha1crypt (Iterations: 19999) + +Speed.#1.........: 153.0 kH/s (437.15ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 15200 - Blockchain, My Wallet, V2 (Iterations: 4999) + +Speed.#1.........: 298.6 kH/s (448.56ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 15300 - DPAPI masterkey file v1 (Iterations: 23999) + +Speed.#1.........: 63270 H/s (440.01ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 15400 - ChaCha20 + +Speed.#1.........: 3258.0 MH/s (823.81ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 15500 - JKS Java Key Store Private Keys (SHA1) + +Speed.#1.........: 7200.0 MH/s (372.65ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 15600 - Ethereum Wallet, PBKDF2-HMAC-SHA256 (Iterations: 1023) + +Speed.#1.........: 1079.4 kH/s (198.94ms) @ Accel:16 Loops:511 Thr:1024 Vec:1 + +Hashmode: 15700 - Ethereum Wallet, SCRYPT (Iterations: 1) + +Speed.#1.........: 1 H/s (31752.04ms) @ Accel:1 Loops:1 Thr:1 Vec:1 + +Hashmode: 15900 - DPAPI masterkey file v2 (Iterations: 12899) + +Speed.#1.........: 34476 H/s (376.83ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16000 - Tripcode + +Speed.#1.........: 139.8 MH/s (299.77ms) @ Accel:2 Loops:512 Thr:1024 Vec:1 + +Hashmode: 16100 - TACACS+ + +Speed.#1.........: 12431.3 MH/s (215.86ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16200 - Apple Secure Notes (Iterations: 19999) + +Speed.#1.........: 56581 H/s (296.23ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16300 - Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256 (Iterations: 1999) + +Speed.#1.........: 555.1 kH/s (288.67ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 16400 - CRAM-MD5 Dovecot + +Speed.#1.........: 21489.6 MH/s (124.73ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16500 - JWT (JSON Web Token) + +Speed.#1.........: 549.5 MH/s (305.19ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16600 - Electrum Wallet (Salt-Type 1-3) + +Speed.#1.........: 429.6 MH/s (390.47ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16700 - FileVault 2 (Iterations: 19999) + +Speed.#1.........: 56852 H/s (294.82ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16800 - WPA-PMKID-PBKDF2 (Iterations: 4095) + +Speed.#1.........: 372.3 kH/s (439.00ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 16801 - WPA-PMKID-PMK (Iterations: 0) + +Speed.#1.........: 164.5 MH/s (0.00ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 16900 - Ansible Vault (Iterations: 9999) + +Speed.#1.........: 113.4 kH/s (295.34ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 17200 - PKZIP (Compressed) + +Speed.#1.........: 3206.5 MH/s (209.21ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 17210 - PKZIP (Uncompressed) + +Speed.#1.........: 1290.6 MH/s (129.92ms) @ Accel:64 Loops:64 Thr:1024 Vec:1 + +Hashmode: 17220 - PKZIP (Compressed Multi-File) + +Speed.#1.........: 5036.7 MH/s (266.29ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 17225 - PKZIP (Mixed Multi-File) + +Speed.#1.........: 6502.1 MH/s (412.65ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 17230 - PKZIP (Mixed Multi-File Checksum-Only) + +Speed.#1.........: 6594.2 MH/s (406.89ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 17300 - SHA3-224 + +Speed.#1.........: 749.1 MH/s (447.82ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 + +Hashmode: 17400 - SHA3-256 + +Speed.#1.........: 741.0 MH/s (452.67ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 17500 - SHA3-384 + +Speed.#1.........: 744.8 MH/s (450.43ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 + +Hashmode: 17600 - SHA3-512 + +Speed.#1.........: 736.0 MH/s (455.75ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 17700 - Keccak-224 + +Speed.#1.........: 737.7 MH/s (454.79ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 + +Hashmode: 17800 - Keccak-256 + +Speed.#1.........: 738.1 MH/s (454.42ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 + +Hashmode: 17900 - Keccak-384 + +Speed.#1.........: 727.1 MH/s (461.43ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 18000 - Keccak-512 + +Speed.#1.........: 726.2 MH/s (462.00ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 18100 - TOTP (HMAC-SHA1) + +Speed.#1.........: 1387.6 MH/s (241.73ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +Hashmode: 18200 - Kerberos 5, etype 23, AS-REP + +Speed.#1.........: 306.5 MH/s (273.63ms) @ Accel:64 Loops:512 Thr:64 Vec:1 + +Hashmode: 18300 - Apple File System (APFS) (Iterations: 19999) + +Speed.#1.........: 54697 H/s (306.44ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 18400 - Open Document Format (ODF) 1.2 (SHA-256, AES) (Iterations: 99999) + +Speed.#1.........: 14492 H/s (462.07ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 18500 - sha1(md5(md5($pass))) + +Speed.#1.........: 2543.0 MH/s (263.82ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 18600 - Open Document Format (ODF) 1.1 (SHA-1, Blowfish) (Iterations: 1023) + +Speed.#1.........: 548.1 kH/s (377.62ms) @ Accel:1024 Loops:1023 Thr:12 Vec:1 + +Hashmode: 18700 - Java Object hashCode() + +Speed.#1.........: 80488.4 MH/s (33.29ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 18800 - Blockchain, My Wallet, Second Password (SHA256) (Iterations: 9999) + +Speed.#1.........: 250.1 kH/s (267.59ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 18900 - Android Backup (Iterations: 9999) + +Speed.#1.........: 143.4 kH/s (466.96ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 19000 - QNX /etc/shadow (MD5) (Iterations: 1000) + +Speed.#1.........: 29510.8 kH/s (70.22ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 19100 - QNX /etc/shadow (SHA256) (Iterations: 1000) + +Speed.#1.........: 13245.9 kH/s (178.94ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 19200 - QNX /etc/shadow (SHA512) (Iterations: 1000) + +Speed.#1.........: 7622.4 kH/s (311.26ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 19300 - sha1($salt1.$pass.$salt2) + +Speed.#1.........: 652.6 MH/s (256.99ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 19500 - Ruby on Rails Restful-Authentication + +Speed.#1.........: 89645.9 kH/s (467.78ms) @ Accel:32 Loops:32 Thr:1024 Vec:1 + +Hashmode: 19600 - Kerberos 5, etype 17, TGS-REP (Iterations: 4095) + +Speed.#1.........: 693.4 kH/s (468.52ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 19700 - Kerberos 5, etype 18, TGS-REP (Iterations: 4095) + +Speed.#1.........: 345.3 kH/s (471.56ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 19800 - Kerberos 5, etype 17, Pre-Auth (Iterations: 4095) + +Speed.#1.........: 692.0 kH/s (470.12ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 19900 - Kerberos 5, etype 18, Pre-Auth (Iterations: 4095) + +Speed.#1.........: 344.2 kH/s (473.67ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 20011 - DiskCryptor SHA512 + XTS 512 bit (Iterations: 999) + +Speed.#1.........: 389.2 kH/s (374.77ms) @ Accel:4 Loops:999 Thr:1024 Vec:1 + +Hashmode: 20012 - DiskCryptor SHA512 + XTS 1024 bit (Iterations: 999) + +Speed.#1.........: 183.3 kH/s (257.53ms) @ Accel:4 Loops:499 Thr:1024 Vec:1 + +Hashmode: 20013 - DiskCryptor SHA512 + XTS 1536 bit (Iterations: 999) + +Speed.#1.........: 121.8 kH/s (230.23ms) @ Accel:4 Loops:249 Thr:1024 Vec:1 + +Hashmode: 20200 - Python passlib pbkdf2-sha512 (Iterations: 24999) + +Speed.#1.........: 17143 H/s (389.86ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 20300 - Python passlib pbkdf2-sha256 (Iterations: 28999) + +Speed.#1.........: 39566 H/s (291.87ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 20400 - Python passlib pbkdf2-sha1 (Iterations: 130999) + +Speed.#1.........: 21328 H/s (477.03ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 20500 - PKZIP Master Key + +Speed.#1.........: 74432.8 MH/s (35.90ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 20510 - PKZIP Master Key (6 byte optimization) + +Speed.#1.........: 14504.9 MH/s (184.99ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 20600 - Oracle Transportation Management (SHA256) (Iterations: 999) + +Speed.#1.........: 2536.6 kH/s (204.33ms) @ Accel:64 Loops:249 Thr:1024 Vec:1 + +Hashmode: 20710 - sha256(sha256($pass).$salt) + +Speed.#1.........: 766.2 MH/s (437.84ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +Hashmode: 20711 - AuthMe sha256 + +Speed.#1.........: 764.3 MH/s (438.93ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 20800 - sha256(md5($pass)) + +Speed.#1.........: 2383.9 MH/s (281.33ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 20900 - md5(sha1($pass).md5($pass).sha1($pass)) + +Speed.#1.........: 2232.4 MH/s (300.52ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 21000 - BitShares v0.x - sha512(sha512_bin(pass)) + +Speed.#1.........: 470.5 MH/s (356.48ms) @ Accel:8 Loops:512 Thr:1024 Vec:1 + +Hashmode: 21100 - sha1(md5($pass.$salt)) + +Speed.#1.........: 4113.2 MH/s (326.23ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 21200 - md5(sha1($salt).md5($pass)) + +Speed.#1.........: 4992.1 MH/s (268.77ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 21300 - md5($salt.sha1($salt.$pass)) + +Speed.#1.........: 2992.7 MH/s (448.35ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 21400 - sha256(sha256_bin($pass)) + +Speed.#1.........: 1281.2 MH/s (261.81ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 21500 - SolarWinds Orion (Iterations: 999) + +Speed.#1.........: 46531 H/s (407.55ms) @ Accel:16 Loops:31 Thr:1024 Vec:1 + +Hashmode: 21600 - Web2py pbkdf2-sha512 (Iterations: 999) + +Speed.#1.........: 459.6 kH/s (351.92ms) @ Accel:4 Loops:999 Thr:1024 Vec:1 + +Hashmode: 21700 - Electrum Wallet (Salt-Type 4) (Iterations: 1023) + +Speed.#1.........: 321.2 kH/s (358.73ms) @ Accel:4 Loops:1023 Thr:1024 Vec:1 + +Hashmode: 21800 - Electrum Wallet (Salt-Type 5) (Iterations: 1023) + +Speed.#1.........: 321.9 kH/s (359.15ms) @ Accel:4 Loops:1023 Thr:1024 Vec:1 + +Hashmode: 22000 - WPA-PBKDF2-PMKID+EAPOL (Iterations: 4095) + +Speed.#1.........: 369.0 kH/s (442.38ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 22001 - WPA-PMK-PMKID+EAPOL (Iterations: 0) + +Speed.#1.........: 164.6 MH/s (0.00ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 22100 - BitLocker (Iterations: 1048576) + +Speed.#1.........: 1284 H/s (498.08ms) @ Accel:4 Loops:4096 Thr:1024 Vec:1 + +Hashmode: 22200 - Citrix NetScaler (SHA512) + +Speed.#1.........: 1017.2 MH/s (329.78ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 22300 - sha256($salt.$pass.$salt) + +Speed.#1.........: 2791.8 MH/s (240.20ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 + +Hashmode: 22301 - Telegram Mobile App Passcode (SHA256) + +Speed.#1.........: 2790.7 MH/s (480.76ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 22400 - AES Crypt (SHA256) (Iterations: 8191) + +Speed.#1.........: 274.1 kH/s (294.31ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +Hashmode: 22500 - MultiBit Classic .key (MD5) + +Speed.#1.........: 471.1 MH/s (356.03ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 22600 - Telegram Desktop App Passcode (PBKDF2-HMAC-SHA1) (Iterations: 3999) + +Speed.#1.........: 106.0 kH/s (394.14ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 22700 - MultiBit HD (scrypt) (Iterations: 1) + +Speed.#1.........: 186 H/s (3446.84ms) @ Accel:1 Loops:1 Thr:16 Vec:1 + +Hashmode: 23001 - SecureZIP AES-128 + +Speed.#1.........: 625.6 MH/s (268.10ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 23002 - SecureZIP AES-192 + +Speed.#1.........: 485.3 MH/s (345.51ms) @ Accel:64 Loops:64 Thr:1024 Vec:1 + +Hashmode: 23003 - SecureZIP AES-256 + +Speed.#1.........: 408.0 MH/s (411.08ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 23100 - Apple Keychain (Iterations: 999) + +Speed.#1.........: 1491.5 kH/s (347.06ms) @ Accel:64 Loops:249 Thr:1024 Vec:1 + +Hashmode: 23200 - XMPP SCRAM PBKDF2-SHA1 (Iterations: 4095) + +Speed.#1.........: 735.8 kH/s (441.04ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 + +Hashmode: 99999 - Plaintext + +Speed.#1.........: 39150.4 MH/s (68.38ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +Started: Sun Oct 17 22:37:28 2021 + Stopped: Mon Oct 18 00:02:27 2021 diff --git a/tools/benchmarking/g5-benchmarks.txt b/tools/benchmarking/g5-benchmarks.txt new file mode 100644 index 0000000..b6f13d9 --- /dev/null +++ b/tools/benchmarking/g5-benchmarks.txt @@ -0,0 +1,1594 @@ +hashcat (v6.2.4) starting in benchmark mode + +CUDA API (CUDA 11.6) +==================== +* Device #1: NVIDIA A10G, 22484/22731 MB, 80MCU + +OpenCL API (OpenCL 3.0 CUDA 11.6.99) - Platform #1 [NVIDIA Corporation] +======================================================================= +* Device #2: NVIDIA A10G, skipped + +Benchmark relevant options: +=========================== +* --benchmark-all +* --optimized-kernel-enable +* --workload-profile=4 + +* Hash-Mode 0 (MD5) + +Speed.#1.........: 59955.8 MH/s (174.16ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10 (md5($pass.$salt)) + +Speed.#1.........: 59999.7 MH/s (174.12ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 11 (Joomla < 2.5.18) + +Speed.#1.........: 59451.2 MH/s (175.39ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12 (PostgreSQL) + +Speed.#1.........: 59428.6 MH/s (175.43ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20 (md5($salt.$pass)) + +Speed.#1.........: 31972.3 MH/s (326.67ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 21 (osCommerce, xt:Commerce) + +Speed.#1.........: 32510.5 MH/s (321.84ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22 (Juniper NetScreen/SSG (ScreenOS)) + +Speed.#1.........: 31965.2 MH/s (326.77ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 23 (Skype) + +Speed.#1.........: 31966.5 MH/s (326.76ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24 (SolarWinds Serv-U) + +Speed.#1.........: 32508.6 MH/s (321.85ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 30 (md5(utf16le($pass).$salt)) + +Speed.#1.........: 59150.4 MH/s (176.16ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 40 (md5($salt.utf16le($pass))) + +Speed.#1.........: 32472.9 MH/s (321.71ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 50 (HMAC-MD5 (key = $pass)) + +Speed.#1.........: 10501.1 MH/s (253.33ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 60 (HMAC-MD5 (key = $salt)) + +Speed.#1.........: 20949.0 MH/s (252.49ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 70 (md5(utf16le($pass))) + +Speed.#1.........: 59879.3 MH/s (174.13ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 100 (SHA1) + +Speed.#1.........: 19551.7 MH/s (270.56ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 101 (nsldap, SHA-1(Base64), Netscape LDAP SHA) + +Speed.#1.........: 19544.6 MH/s (270.61ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 110 (sha1($pass.$salt)) + +Speed.#1.........: 19759.8 MH/s (267.57ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 111 (nsldaps, SSHA-1(Base64), Netscape LDAP SSHA) + +Speed.#1.........: 19547.5 MH/s (270.60ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 112 (Oracle S: Type (Oracle 11+)) + +Speed.#1.........: 19760.5 MH/s (267.62ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 120 (sha1($salt.$pass)) + +Speed.#1.........: 15089.5 MH/s (350.76ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 121 (SMF (Simple Machines Forum) > v1.1) + +Speed.#1.........: 15092.9 MH/s (350.73ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 122 (macOS v10.4, macOS v10.5, macOS v10.6) + +Speed.#1.........: 14977.2 MH/s (353.49ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 124 (Django (SHA-1)) + +Speed.#1.........: 14974.2 MH/s (353.53ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 125 (ArubaOS) + +Speed.#1.........: 14976.7 MH/s (353.49ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 130 (sha1(utf16le($pass).$salt)) + +Speed.#1.........: 19749.6 MH/s (267.57ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 131 (MSSQL (2000)) + +Speed.#1.........: 19745.5 MH/s (267.58ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 132 (MSSQL (2005)) + +Speed.#1.........: 19738.0 MH/s (267.63ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 133 (PeopleSoft) + +Speed.#1.........: 19528.1 MH/s (270.58ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 140 (sha1($salt.utf16le($pass))) + +Speed.#1.........: 14961.5 MH/s (353.52ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 141 (Episerver 6.x < .NET 4) + +Speed.#1.........: 14963.9 MH/s (353.49ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 150 (HMAC-SHA1 (key = $pass)) + +Speed.#1.........: 4560.6 MH/s (292.73ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 160 (HMAC-SHA1 (key = $salt)) + +Speed.#1.........: 8403.0 MH/s (316.78ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 170 (sha1(utf16le($pass))) + +Speed.#1.........: 19537.8 MH/s (270.56ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 200 (MySQL323) + +Speed.#1.........: 165.9 GH/s (62.72ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 300 (MySQL4.1/MySQL5) + +Speed.#1.........: 8617.0 MH/s (308.83ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 400 (phpass) [Iterations: 2048] + +Speed.#1.........: 16405.6 kH/s (259.00ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) [Iterations: 1000] + +Speed.#1.........: 21999.1 kH/s (356.23ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 501 (Juniper IVE) [Iterations: 1000] + +Speed.#1.........: 21986.4 kH/s (356.61ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 600 (BLAKE2b-512) + +Speed.#1.........: 5060.7 MH/s (263.72ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 900 (MD4) + +Speed.#1.........: 102.0 GH/s (102.24ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1000 (NTLM) + +Speed.#1.........: 101.7 GH/s (102.26ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1100 (Domain Cached Credentials (DCC), MS Cache) + +Speed.#1.........: 30228.7 MH/s (345.50ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1300 (SHA2-224) + +Speed.#1.........: 8331.3 MH/s (319.56ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1400 (SHA2-256) + +Speed.#1.........: 8556.6 MH/s (311.01ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1410 (sha256($pass.$salt)) + +Speed.#1.........: 8539.6 MH/s (311.67ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1411 (SSHA-256(Base64), LDAP {SSHA256}) + +Speed.#1.........: 8560.0 MH/s (310.97ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1420 (sha256($salt.$pass)) + +Speed.#1.........: 7672.0 MH/s (347.03ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1421 (hMailServer) + +Speed.#1.........: 7652.6 MH/s (347.87ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1430 (sha256(utf16le($pass).$salt)) + +Speed.#1.........: 8534.3 MH/s (311.67ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1440 (sha256($salt.utf16le($pass))) + +Speed.#1.........: 7651.2 MH/s (347.86ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1441 (Episerver 6.x >= .NET 4) + +Speed.#1.........: 7649.4 MH/s (347.86ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1450 (HMAC-SHA256 (key = $pass)) + +Speed.#1.........: 1680.0 MH/s (398.06ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1460 (HMAC-SHA256 (key = $salt)) + +Speed.#1.........: 3702.8 MH/s (360.61ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1470 (sha256(utf16le($pass))) + +Speed.#1.........: 8550.8 MH/s (311.13ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1500 (descrypt, DES (Unix), Traditional DES) + +Speed.#1.........: 2446.0 MH/s (273.26ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) [Iterations: 1000] + +Speed.#1.........: 21953.9 kH/s (356.75ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 1700 (SHA2-512) + +Speed.#1.........: 2892.1 MH/s (461.82ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1710 (sha512($pass.$salt)) + +Speed.#1.........: 2878.1 MH/s (463.93ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1711 (SSHA-512(Base64), LDAP {SSHA512}) + +Speed.#1.........: 2878.5 MH/s (463.93ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1720 (sha512($salt.$pass)) + +Speed.#1.........: 2755.7 MH/s (242.47ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1722 (macOS v10.7) + +Speed.#1.........: 2754.1 MH/s (242.66ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1730 (sha512(utf16le($pass).$salt)) + +Speed.#1.........: 2878.1 MH/s (463.96ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1731 (MSSQL (2012, 2014)) + +Speed.#1.........: 2878.1 MH/s (463.92ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1740 (sha512($salt.utf16le($pass))) + +Speed.#1.........: 2754.1 MH/s (242.66ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1750 (HMAC-SHA512 (key = $pass)) + +Speed.#1.........: 636.5 MH/s (262.16ms) @ Accel:32 Loops:128 Thr:512 Vec:1 + +* Hash-Mode 1760 (HMAC-SHA512 (key = $salt)) + +Speed.#1.........: 1282.6 MH/s (260.77ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1770 (sha512(utf16le($pass))) + +Speed.#1.........: 2891.4 MH/s (461.82ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1800 (sha512crypt $6$, SHA512 (Unix)) [Iterations: 5000] + +Speed.#1.........: 343.4 kH/s (302.34ms) @ Accel:32768 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 2000 (STDOUT) + +Speed.#1.........: 75821.5 GH/s (0.02ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) [Iterations: 10239] + +Speed.#1.........: 801.7 kH/s (322.93ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2400 (Cisco-PIX MD5) + +Speed.#1.........: 45026.7 MH/s (231.99ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2410 (Cisco-ASA MD5) + +Speed.#1.........: 45081.0 MH/s (117.15ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2600 (md5(md5($pass))) + +Speed.#1.........: 19264.0 MH/s (274.61ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2611 (vBulletin < v3.8.5) + +Speed.#1.........: 19263.4 MH/s (274.65ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2612 (PHPS) + +Speed.#1.........: 19265.9 MH/s (274.61ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2711 (vBulletin >= v3.8.5) + +Speed.#1.........: 13332.9 MH/s (396.78ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2811 (MyBB 1.2+, IPB2+ (Invision Power Board)) + +Speed.#1.........: 13895.0 MH/s (381.02ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3000 (LM) + +Speed.#1.........: 59128.4 MH/s (44.76ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 3100 (Oracle H: Type (Oracle 7+)) + +Speed.#1.........: 1530.3 MH/s (436.99ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3200 (bcrypt $2*$, Blowfish (Unix)) [Iterations: 32] + +Speed.#1.........: 93734 H/s (255.34ms) @ Accel:1024 Loops:32 Thr:24 Vec:1 + +* Hash-Mode 3500 (md5(md5(md5($pass)))) + +Speed.#1.........: 12195.6 MH/s (434.24ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3710 (md5($salt.md5($pass))) + +Speed.#1.........: 17081.7 MH/s (309.72ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3711 (MediaWiki B type) + +Speed.#1.........: 16955.1 MH/s (308.19ms) @ Accel:256 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 3800 (md5($salt.$pass.$salt)) + +Speed.#1.........: 32339.8 MH/s (323.62ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 3910 (md5(md5($pass).md5($salt))) + +Speed.#1.........: 13327.5 MH/s (396.85ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4010 (md5($salt.md5($salt.$pass))) + +Speed.#1.........: 14888.3 MH/s (355.61ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4110 (md5($salt.md5($pass.$salt))) + +Speed.#1.........: 17111.0 MH/s (309.16ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 4300 (md5(strtoupper(md5($pass)))) + +Speed.#1.........: 19262.8 MH/s (274.61ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4400 (md5(sha1($pass))) + +Speed.#1.........: 10781.2 MH/s (246.87ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4500 (sha1(sha1($pass))) + +Speed.#1.........: 7743.2 MH/s (343.81ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4510 (sha1(sha1($pass).$salt)) + +Speed.#1.........: 7506.2 MH/s (354.74ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4520 (sha1($salt.sha1($pass))) + +Speed.#1.........: 4790.2 MH/s (278.72ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4521 (Redmine) + +Speed.#1.........: 4789.9 MH/s (278.72ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4522 (PunBB) + +Speed.#1.........: 7222.3 MH/s (368.57ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4700 (sha1(md5($pass))) + +Speed.#1.........: 11075.4 MH/s (240.26ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4710 (sha1(md5($pass).$salt)) + +Speed.#1.........: 10634.9 MH/s (250.22ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 4711 (Huawei sha1(md5($pass).$salt)) + +Speed.#1.........: 10565.0 MH/s (250.25ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 4800 (iSCSI CHAP authentication, MD5(CHAP)) + +Speed.#1.........: 44134.3 MH/s (119.39ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 4900 (sha1($salt.$pass.$salt)) + +Speed.#1.........: 14587.5 MH/s (362.63ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5000 (sha1(sha1($salt.$pass.$salt))) + +Speed.#1.........: 7225.8 MH/s (368.41ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5100 (Half MD5) + +Speed.#1.........: 40075.8 MH/s (260.57ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5200 (Password Safe v3) [Iterations: 2049] + +Speed.#1.........: 3303.1 kH/s (252.54ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 5300 (IKE-PSK MD5) + +Speed.#1.........: 2421.8 MH/s (276.02ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 5400 (IKE-PSK SHA1) + +Speed.#1.........: 1049.2 MH/s (318.77ms) @ Accel:128 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 5500 (NetNTLMv1 / NetNTLMv1+ESS) + +Speed.#1.........: 61883.3 MH/s (168.53ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5600 (NetNTLMv2) + +Speed.#1.........: 4529.4 MH/s (293.71ms) @ Accel:128 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 5700 (Cisco-IOS type 4 (SHA256)) + +Speed.#1.........: 8557.8 MH/s (310.96ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 5800 (Samsung Android Password/PIN) [Iterations: 1023] + +Speed.#1.........: 12108.8 kH/s (369.54ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 6000 (RIPEMD-160) + +Speed.#1.........: 13944.8 MH/s (379.61ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 6100 (Whirlpool) + +Speed.#1.........: 1290.8 MH/s (258.92ms) @ Accel:16 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) [Iterations: 1999] + +Speed.#1.........: 751.1 kH/s (393.85ms) @ Accel:64 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 1999] + +Speed.#1.........: 406.2 kH/s (344.64ms) @ Accel:32 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 1999] + +Speed.#1.........: 279.1 kH/s (246.19ms) @ Accel:32 Loops:128 Thr:512 Vec:1 + +* Hash-Mode 6221 (TrueCrypt SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 1097.5 kH/s (227.65ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 6222 (TrueCrypt SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 522.6 kH/s (226.80ms) @ Accel:32 Loops:124 Thr:512 Vec:1 + +* Hash-Mode 6223 (TrueCrypt SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 344.2 kH/s (340.05ms) @ Accel:32 Loops:124 Thr:512 Vec:1 + +* Hash-Mode 6231 (TrueCrypt Whirlpool + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 147.1 kH/s (239.51ms) @ Accel:16 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 6232 (TrueCrypt Whirlpool + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 75178 H/s (267.72ms) @ Accel:32 Loops:62 Thr:128 Vec:1 + +* Hash-Mode 6233 (TrueCrypt Whirlpool + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 48771 H/s (359.41ms) @ Accel:32 Loops:124 Thr:64 Vec:1 + +- +* Hash-Mode 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 999] +- + +Speed.#1.........: 1375.1 kH/s (350.87ms) @ Accel:128 Loops:124 Thr:512 Vec:1 + +-- +* Hash-Mode 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 999] +-- + +Speed.#1.........: 711.4 kH/s (307.89ms) @ Accel:64 Loops:124 Thr:512 Vec:1 + +-- +* Hash-Mode 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 999] +-- + +Speed.#1.........: 479.2 kH/s (220.00ms) @ Accel:32 Loops:124 Thr:512 Vec:1 + +* Hash-Mode 6300 (AIX {smd5}) [Iterations: 1000] + +Speed.#1.........: 21992.2 kH/s (356.31ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 6400 (AIX {ssha256}) [Iterations: 63] + +Speed.#1.........: 31799.7 kH/s (196.13ms) @ Accel:256 Loops:63 Thr:512 Vec:1 + +* Hash-Mode 6500 (AIX {ssha512}) [Iterations: 63] + +Speed.#1.........: 15017.7 kH/s (257.12ms) @ Accel:256 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 6600 (1Password, agilekeychain) [Iterations: 999] + +Speed.#1.........: 7436.6 kH/s (211.16ms) @ Accel:128 Loops:499 Thr:512 Vec:1 + +* Hash-Mode 6700 (AIX {ssha1}) [Iterations: 63] + +Speed.#1.........: 48828.2 kH/s (40.03ms) @ Accel:256 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 6800 (LastPass + LastPass sniffed) [Iterations: 499] + +Speed.#1.........: 6365.5 kH/s (367.90ms) @ Accel:64 Loops:499 Thr:512 Vec:1 + +* Hash-Mode 6900 (GOST R 34.11-94) + +Speed.#1.........: 917.1 MH/s (360.44ms) @ Accel:256 Loops:64 Thr:256 Vec:1 + +* Hash-Mode 7000 (FortiGate (FortiOS)) + +Speed.#1.........: 17083.8 MH/s (309.62ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 7100 (macOS v10.8+ (PBKDF2-SHA512)) [Iterations: 1023] + +Speed.#1.........: 1221.1 kH/s (258.47ms) @ Accel:256 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 7200 (GRUB 2) [Iterations: 1023] + +Speed.#1.........: 1221.5 kH/s (258.42ms) @ Accel:256 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 7300 (IPMI2 RAKP HMAC-SHA1) + +Speed.#1.........: 2639.2 MH/s (253.21ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 7400 (sha256crypt $5$, SHA256 (Unix)) [Iterations: 5000] + +Speed.#1.........: 796.6 kH/s (319.34ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 7401 (MySQL $A$ (sha256crypt)) [Iterations: 5000] + +Speed.#1.........: 751.7 kH/s (338.37ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) + +Speed.#1.........: 1414.8 MH/s (471.04ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 7700 (SAP CODVN B (BCODE)) + +Speed.#1.........: 5252.7 MH/s (253.24ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) + +Speed.#1.........: 5253.7 MH/s (253.26ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 7800 (SAP CODVN F/G (PASSCODE)) + +Speed.#1.........: 3408.5 MH/s (388.41ms) @ Accel:512 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) + +Speed.#1.........: 3427.7 MH/s (388.49ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 7900 (Drupal7) [Iterations: 16384] + +Speed.#1.........: 153.3 kH/s (265.80ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 8000 (Sybase ASE) + +Speed.#1.........: 1073.0 MH/s (310.87ms) @ Accel:256 Loops:256 Thr:64 Vec:1 + +* Hash-Mode 8100 (Citrix NetScaler (SHA1)) + +Speed.#1.........: 16692.6 MH/s (316.98ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8200 (1Password, cloudkeychain) [Iterations: 39999] + +Speed.#1.........: 31838 H/s (262.03ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8300 (DNSSEC (NSEC3)) + +Speed.#1.........: 7305.0 MH/s (364.32ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8400 (WBB3 (Woltlab Burning Board)) + +Speed.#1.........: 3231.5 MH/s (413.14ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8500 (RACF) + +Speed.#1.........: 7941.3 MH/s (335.20ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 8600 (Lotus Notes/Domino 5) + +Speed.#1.........: 799.3 MH/s (417.65ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +* Hash-Mode 8700 (Lotus Notes/Domino 6) + +Speed.#1.........: 263.8 MH/s (316.79ms) @ Accel:16 Loops:128 Thr:512 Vec:1 + +* Hash-Mode 8800 (Android FDE <= 4.3) [Iterations: 1999] + +Speed.#1.........: 1975.3 kH/s (318.33ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8900 (scrypt) [Iterations: 16384] + +Speed.#1.........: 3112 H/s (38.90ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9000 (Password Safe v2) [Iterations: 1000] + +Speed.#1.........: 1862.0 kH/s (309.12ms) @ Accel:512 Loops:1000 Thr:24 Vec:1 + +* Hash-Mode 9100 (Lotus Notes/Domino 8) [Iterations: 4999] + +Speed.#1.........: 1608.5 kH/s (316.29ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) [Iterations: 19999] + +Speed.#1.........: 167.5 kH/s (397.69ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 9300 (Cisco-IOS $9$ (scrypt)) [Iterations: 16384] + +Speed.#1.........: 37075 H/s (2.27ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9400 (MS Office 2007) [Iterations: 50000] + +Speed.#1.........: 327.8 kH/s (322.45ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 9500 (MS Office 2010) [Iterations: 100000] + +Speed.#1.........: 163.9 kH/s (322.43ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 9600 (MS Office 2013) [Iterations: 100000] + +Speed.#1.........: 25986 H/s (411.39ms) @ Accel:16384 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) + +Speed.#1.........: 1057.4 MH/s (315.97ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) + +Speed.#1.........: 1497.5 MH/s (421.46ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) + +Speed.#1.........: 5295.0 MH/s (251.43ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) + +Speed.#1.........: 1343.8 MH/s (248.53ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) + +Speed.#1.........: 1457.7 MH/s (433.67ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) + +Speed.#1.........: 7947.9 MH/s (335.07ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9900 (Radmin2) + +Speed.#1.........: 21911.0 MH/s (478.07ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10000 (Django (PBKDF2-SHA256)) [Iterations: 9999] + +Speed.#1.........: 334.8 kH/s (388.32ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10100 (SipHash) + +Speed.#1.........: 68152.0 MH/s (153.20ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 10200 (CRAM-MD5) + +Speed.#1.........: 10504.6 MH/s (253.32ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) [Iterations: 1023] + +Speed.#1.........: 11719.3 kH/s (383.48ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) + +Speed.#1.........: 1694.5 MH/s (393.36ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) + +Speed.#1.........: 1653.5 MH/s (379.19ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) + +Speed.#1.........: 21773.7 MH/s (122.14ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) [Iterations: 70] + +Speed.#1.........: 41869.6 kH/s (31.89ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 10600 (PDF 1.7 Level 3 (Acrobat 9)) + +Speed.#1.........: 8559.8 MH/s (310.96ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) [Iterations: 64] + +Speed.#1.........: 157.6 kH/s (517.88ms) @ Accel:32 Loops:8 Thr:256 Vec:1 + +* Hash-Mode 10800 (SHA2-384) + +Speed.#1.........: 2840.9 MH/s (470.15ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10810 (sha384($pass.$salt)) + +Speed.#1.........: 2832.1 MH/s (470.02ms) @ Accel:64 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 10820 (sha384($salt.$pass)) + +Speed.#1.........: 2714.5 MH/s (246.19ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10830 (sha384(utf16le($pass).$salt)) + +Speed.#1.........: 2840.6 MH/s (470.07ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10840 (sha384($salt.utf16le($pass))) + +Speed.#1.........: 2718.8 MH/s (245.80ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10870 (sha384(utf16le($pass))) + +Speed.#1.........: 2839.7 MH/s (470.16ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10900 (PBKDF2-HMAC-SHA256) [Iterations: 999] + +Speed.#1.........: 3283.1 kH/s (368.49ms) @ Accel:32 Loops:999 Thr:512 Vec:1 + +* Hash-Mode 10901 (RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256)) [Iterations: 8191] + +Speed.#1.........: 408.1 kH/s (397.63ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 11000 (PrestaShop) + +Speed.#1.........: 23756.0 MH/s (439.96ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 11100 (PostgreSQL CRAM (MD5)) + +Speed.#1.........: 19104.6 MH/s (277.01ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 11200 (MySQL CRAM (SHA1)) + +Speed.#1.........: 5180.7 MH/s (256.88ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 11300 (Bitcoin/Litecoin wallet.dat) [Iterations: 200459] + +Speed.#1.........: 13061 H/s (408.45ms) @ Accel:32768 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 11400 (SIP digest authentication (MD5)) + +Speed.#1.........: 9003.8 MH/s (295.65ms) @ Accel:512 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 11500 (CRC32) + +Speed.#1.........: 15358.2 MH/s (169.91ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 11600 (7-Zip) [Iterations: 16384] + +Speed.#1.........: 880.5 kH/s (321.03ms) @ Accel:512 Loops:4096 Thr:32 Vec:1 + +* Hash-Mode 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) + +Speed.#1.........: 186.2 MH/s (449.05ms) @ Accel:4 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 11750 (HMAC-Streebog-256 (key = $pass), big-endian) + +Speed.#1.........: 66500.7 kH/s (314.59ms) @ Accel:4 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 11760 (HMAC-Streebog-256 (key = $salt), big-endian) + +Speed.#1.........: 92015.3 kH/s (454.95ms) @ Accel:2 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) + +Speed.#1.........: 186.3 MH/s (449.05ms) @ Accel:8 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 11850 (HMAC-Streebog-512 (key = $pass), big-endian) + +Speed.#1.........: 58219.5 kH/s (359.47ms) @ Accel:2 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 11860 (HMAC-Streebog-512 (key = $salt), big-endian) + +Speed.#1.........: 76614.3 kH/s (272.93ms) @ Accel:2 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 11900 (PBKDF2-HMAC-MD5) [Iterations: 999] + +Speed.#1.........: 16301.8 kH/s (246.56ms) @ Accel:128 Loops:999 Thr:512 Vec:1 + +* Hash-Mode 12000 (PBKDF2-HMAC-SHA1) [Iterations: 999] + +Speed.#1.........: 7243.7 kH/s (316.33ms) @ Accel:64 Loops:999 Thr:512 Vec:1 + +* Hash-Mode 12001 (Atlassian (PBKDF2-HMAC-SHA1)) [Iterations: 9999] + +Speed.#1.........: 815.9 kH/s (316.53ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12100 (PBKDF2-HMAC-SHA512) [Iterations: 999] + +Speed.#1.........: 1245.7 kH/s (227.65ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 12200 (eCryptfs) [Iterations: 65536] + +Speed.#1.........: 40321 H/s (252.81ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 12300 (Oracle T: Type (Oracle 12+)) [Iterations: 4095] + +Speed.#1.........: 306.5 kH/s (262.05ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12400 (BSDi Crypt, Extended DES) [Iterations: 2194] + +Speed.#1.........: 7005.1 kH/s (224.60ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12500 (RAR3-hp) [Iterations: 262144] + +Speed.#1.........: 20601 H/s (6.71ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 12600 (ColdFusion 10+) + +Speed.#1.........: 4915.0 MH/s (271.56ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12700 (Blockchain, My Wallet) [Iterations: 9] + +Speed.#1.........: 60289.2 kH/s (11.81ms) @ Accel:256 Loops:9 Thr:256 Vec:1 + +* Hash-Mode 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) [Iterations: 99] + +Speed.#1.........: 23141.0 kH/s (292.22ms) @ Accel:256 Loops:99 Thr:512 Vec:1 + +* Hash-Mode 12900 (Android FDE (Samsung DEK)) [Iterations: 4095] + +Speed.#1.........: 849.7 kH/s (377.59ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 13000 (RAR5) [Iterations: 32799] + +Speed.#1.........: 107.5 kH/s (377.72ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 13100 (Kerberos 5, etype 23, TGS-REP) + +Speed.#1.........: 1379.2 MH/s (242.05ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 13200 (AxCrypt 1) [Iterations: 10467] + +Speed.#1.........: 410.5 kH/s (288.01ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 13300 (AxCrypt 1 in-memory SHA1) + +Speed.#1.........: 18176.7 MH/s (291.04ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +-- +* Hash-Mode 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) [Iterations: 24569] +-- + +Speed.#1.........: 125.4 kH/s (433.35ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 13500 (PeopleSoft PS_TOKEN) + +Speed.#1.........: 14043.3 MH/s (376.65ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 13600 (WinZip) [Iterations: 999] + +Speed.#1.........: 7106.5 kH/s (318.84ms) @ Accel:64 Loops:999 Thr:512 Vec:1 + +* Hash-Mode 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) [Iterations: 655330] + +Speed.#1.........: 2489 H/s (159.74ms) @ Accel:1024 Loops:500 Thr:1024 Vec:1 + +* Hash-Mode 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 655330] + +Speed.#1.........: 1425 H/s (139.72ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 + +* Hash-Mode 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 655330] + +Speed.#1.........: 996 H/s (199.29ms) @ Accel:1024 Loops:250 Thr:1024 Vec:1 + +* Hash-Mode 13721 (VeraCrypt SHA512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 2498 H/s (209.13ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 13722 (VeraCrypt SHA512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 1257 H/s (207.61ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 + +* Hash-Mode 13723 (VeraCrypt SHA512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 837 H/s (155.99ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 + +* Hash-Mode 13731 (VeraCrypt Whirlpool + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 298 H/s (219.14ms) @ Accel:4096 Loops:250 Thr:64 Vec:1 + +* Hash-Mode 13732 (VeraCrypt Whirlpool + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 138 H/s (118.23ms) @ Accel:512 Loops:250 Thr:128 Vec:1 + +* Hash-Mode 13733 (VeraCrypt Whirlpool + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 81 H/s (202.52ms) @ Accel:64 Loops:1000 Thr:256 Vec:1 + +* Hash-Mode 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 4981 H/s (163.49ms) @ Accel:1024 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 2844 H/s (143.00ms) @ Accel:1024 Loops:256 Thr:1024 Vec:1 + +* Hash-Mode 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 1991 H/s (204.11ms) @ Accel:1024 Loops:256 Thr:1024 Vec:1 + +* Hash-Mode 13751 (VeraCrypt SHA256 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 3463 H/s (150.76ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 13752 (VeraCrypt SHA256 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 1734 H/s (150.49ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 + +* Hash-Mode 13753 (VeraCrypt SHA256 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 1157 H/s (112.88ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 + +-- +* Hash-Mode 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) [Iterations: 199999] +-- + +Speed.#1.........: 8659 H/s (154.31ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 4336 H/s (154.02ms) @ Accel:1024 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 2890 H/s (115.49ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 13771 (VeraCrypt Streebog-512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 106 H/s (154.10ms) @ Accel:512 Loops:250 Thr:128 Vec:1 + +* Hash-Mode 13772 (VeraCrypt Streebog-512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 53 H/s (154.57ms) @ Accel:2048 Loops:125 Thr:32 Vec:1 + +* Hash-Mode 13773 (VeraCrypt Streebog-512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 36 H/s (113.67ms) @ Accel:1024 Loops:125 Thr:32 Vec:1 + +* Hash-Mode 13781 (VeraCrypt Streebog-512 + XTS 512 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 286 H/s (146.14ms) @ Accel:2048 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 13782 (VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 132 H/s (158.43ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 + +* Hash-Mode 13783 (VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 88 H/s (118.86ms) @ Accel:2048 Loops:64 Thr:32 Vec:1 + +* Hash-Mode 13800 (Windows Phone 8+ PIN/password) + +Speed.#1.........: 2210.1 MH/s (302.00ms) @ Accel:32 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 13900 (OpenCart) + +Speed.#1.........: 4996.8 MH/s (267.10ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 14000 (DES (PT = $salt, key = $pass)) + +Speed.#1.........: 57432.0 MH/s (46.01ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 14100 (3DES (PT = $salt, key = $pass)) + +Speed.#1.........: 7959.3 MH/s (334.31ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 14400 (sha1(CX)) + +Speed.#1.........: 961.1 MH/s (348.00ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 14500 (Linux Kernel Crypto API (2.4)) + +Speed.#1.........: 3173.8 MH/s (419.51ms) @ Accel:128 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 14600 (LUKS) [Iterations: 163044] + +Speed.#1.........: 25269 H/s (322.51ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 14700 (iTunes backup < 10.0) [Iterations: 9999] + +Speed.#1.........: 406.8 kH/s (318.48ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 14800 (iTunes backup >= 10.0) [Iterations: 9999999] + +Speed.#1.........: 331 H/s (322.09ms) @ Accel:16384 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 14900 (Skip32 (PT = $salt, key = $pass)) + +Speed.#1.........: 16917.9 MH/s (2.27ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15000 (FileZilla Server >= 0.9.55) + +Speed.#1.........: 2562.6 MH/s (260.78ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15100 (Juniper/NetBSD sha1crypt) [Iterations: 19999] + +Speed.#1.........: 409.2 kH/s (324.63ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15200 (Blockchain, My Wallet, V2) [Iterations: 4999] + +Speed.#1.........: 809.8 kH/s (318.42ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15300 (DPAPI masterkey file v1) [Iterations: 23999] + +Speed.#1.........: 170.9 kH/s (324.93ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15400 (ChaCha20) + +Speed.#1.........: 11816.5 MH/s (886.18ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15500 (JKS Java Key Store Private Keys (SHA1)) + +Speed.#1.........: 18580.9 MH/s (284.19ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1023] + +Speed.#1.........: 3207.4 kH/s (377.28ms) @ Accel:32 Loops:1023 Thr:512 Vec:1 + +* Hash-Mode 15700 (Ethereum Wallet, SCRYPT) [Iterations: 262144] + +Speed.#1.........: 0 H/s (12.84ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 + +* Hash-Mode 15900 (DPAPI masterkey file v2) [Iterations: 12899] + +Speed.#1.........: 98723 H/s (252.98ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16000 (Tripcode) + +Speed.#1.........: 655.0 MH/s (255.42ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16100 (TACACS+) + +Speed.#1.........: 42152.2 MH/s (125.35ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16200 (Apple Secure Notes) [Iterations: 19999] + +Speed.#1.........: 176.6 kH/s (377.48ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +-- +* Hash-Mode 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1999] +-- + +Speed.#1.........: 1688.4 kH/s (368.61ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16400 (CRAM-MD5 Dovecot) + +Speed.#1.........: 58186.2 MH/s (179.43ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16500 (JWT (JSON Web Token)) + +Speed.#1.........: 1630.3 MH/s (410.14ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16600 (Electrum Wallet (Salt-Type 1-3)) + +Speed.#1.........: 1964.8 MH/s (340.28ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16700 (FileVault 2) [Iterations: 19999] + +Speed.#1.........: 167.7 kH/s (397.64ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 16900 (Ansible Vault) [Iterations: 9999] + +Speed.#1.........: 352.1 kH/s (368.78ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 17200 (PKZIP (Compressed)) + +Speed.#1.........: 9848.6 MH/s (135.06ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 17210 (PKZIP (Uncompressed)) + +Speed.#1.........: 3339.8 MH/s (195.39ms) @ Accel:1024 Loops:64 Thr:128 Vec:1 + +* Hash-Mode 17220 (PKZIP (Compressed Multi-File)) + +Speed.#1.........: 17276.3 MH/s (154.10ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 17225 (PKZIP (Mixed Multi-File)) + +Speed.#1.........: 20162.7 MH/s (132.01ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 17230 (PKZIP (Mixed Multi-File Checksum-Only)) + +Speed.#1.........: 25650.4 MH/s (206.22ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 17300 (SHA3-224) + +Speed.#1.........: 1938.9 MH/s (344.88ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17400 (SHA3-256) + +Speed.#1.........: 1937.7 MH/s (344.98ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17500 (SHA3-384) + +Speed.#1.........: 1938.2 MH/s (344.94ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17600 (SHA3-512) + +Speed.#1.........: 1937.4 MH/s (345.07ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17700 (Keccak-224) + +Speed.#1.........: 1938.1 MH/s (344.93ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17800 (Keccak-256) + +Speed.#1.........: 1935.3 MH/s (344.97ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 17900 (Keccak-384) + +Speed.#1.........: 1938.6 MH/s (344.94ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18000 (Keccak-512) + +Speed.#1.........: 1937.9 MH/s (345.01ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18100 (TOTP (HMAC-SHA1)) + +Speed.#1.........: 4038.9 MH/s (330.63ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 18200 (Kerberos 5, etype 23, AS-REP) + +Speed.#1.........: 1367.9 MH/s (244.56ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 18300 (Apple File System (APFS)) [Iterations: 19999] + +Speed.#1.........: 176.6 kH/s (377.47ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) [Iterations: 99999] + +Speed.#1.........: 40897 H/s (326.13ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 18500 (sha1(md5(md5($pass)))) + +Speed.#1.........: 7541.4 MH/s (352.99ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) [Iterations: 1023] + +Speed.#1.........: 3076.4 kH/s (323.56ms) @ Accel:64 Loops:1023 Thr:512 Vec:1 + +* Hash-Mode 18700 (Java Object hashCode()) + +Speed.#1.........: 278.8 GH/s (37.24ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18800 (Blockchain, My Wallet, Second Password (SHA256)) [Iterations: 9999] + +Speed.#1.........: 701.9 kH/s (369.59ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 18900 (Android Backup) [Iterations: 9999] + +Speed.#1.........: 408.0 kH/s (318.45ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 19000 (QNX /etc/shadow (MD5)) [Iterations: 1000] + +Speed.#1.........: 42411.8 kH/s (55.19ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 + +* Hash-Mode 19100 (QNX /etc/shadow (SHA256)) [Iterations: 1000] + +Speed.#1.........: 26837.1 kH/s (125.85ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 + +* Hash-Mode 19200 (QNX /etc/shadow (SHA512)) [Iterations: 1000] + +Speed.#1.........: 19339.6 kH/s (90.96ms) @ Accel:1024 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 19300 (sha1($salt1.$pass.$salt2)) + +Speed.#1.........: 2699.1 MH/s (247.62ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 19500 (Ruby on Rails Restful-Authentication) + +Speed.#1.........: 319.4 MH/s (261.14ms) @ Accel:256 Loops:64 Thr:64 Vec:1 + +* Hash-Mode 19600 (Kerberos 5, etype 17, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 1956.9 kH/s (324.00ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 19700 (Kerberos 5, etype 18, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 982.4 kH/s (326.06ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 19800 (Kerberos 5, etype 17, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 1957.7 kH/s (324.00ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 19900 (Kerberos 5, etype 18, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 983.5 kH/s (326.06ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20011 (DiskCryptor SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 1134.4 kH/s (227.68ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 20012 (DiskCryptor SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 547.3 kH/s (226.84ms) @ Accel:32 Loops:124 Thr:512 Vec:1 + +* Hash-Mode 20013 (DiskCryptor SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 361.0 kH/s (339.97ms) @ Accel:32 Loops:124 Thr:512 Vec:1 + +* Hash-Mode 20200 (Python passlib pbkdf2-sha512) [Iterations: 24999] + +Speed.#1.........: 50943 H/s (262.05ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20300 (Python passlib pbkdf2-sha256) [Iterations: 28999] + +Speed.#1.........: 115.5 kH/s (397.69ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20400 (Python passlib pbkdf2-sha1) [Iterations: 130999] + +Speed.#1.........: 62485 H/s (324.23ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20500 (PKZIP Master Key) + +Speed.#1.........: 219.4 GH/s (47.31ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20510 (PKZIP Master Key (6 byte optimization)) + +Speed.#1.........: 50571.4 MH/s (103.10ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 20600 (Oracle Transportation Management (SHA256)) [Iterations: 999] + +Speed.#1.........: 6550.4 kH/s (295.58ms) @ Accel:128 Loops:249 Thr:1024 Vec:1 + +* Hash-Mode 20710 (sha256(sha256($pass).$salt)) + +Speed.#1.........: 2329.4 MH/s (286.96ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 20711 (AuthMe sha256) + +Speed.#1.........: 2328.6 MH/s (287.02ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 20720 (sha256($salt.sha256($pass))) + +Speed.#1.........: 2117.4 MH/s (315.70ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20800 (sha256(md5($pass))) + +Speed.#1.........: 6586.9 MH/s (404.09ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 20900 (md5(sha1($pass).md5($pass).sha1($pass))) + +Speed.#1.........: 6202.2 MH/s (429.36ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 21000 (BitShares v0.x - sha512(sha512_bin(pass))) + +Speed.#1.........: 1356.4 MH/s (243.76ms) @ Accel:256 Loops:64 Thr:256 Vec:1 + +* Hash-Mode 21100 (sha1(md5($pass.$salt))) + +Speed.#1.........: 11076.4 MH/s (240.26ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 21200 (md5(sha1($salt).md5($pass))) + +Speed.#1.........: 13961.3 MH/s (379.16ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 21300 (md5($salt.sha1($salt.$pass))) + +Speed.#1.........: 8200.0 MH/s (324.69ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 21400 (sha256(sha256_bin($pass))) + +Speed.#1.........: 3872.6 MH/s (344.72ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 21500 (SolarWinds Orion) [Iterations: 999] + +Speed.#1.........: 154.0 kH/s (256.84ms) @ Accel:16 Loops:62 Thr:512 Vec:1 + +* Hash-Mode 21501 (SolarWinds Orion v2) [Iterations: 999] + +Speed.#1.........: 154.0 kH/s (256.92ms) @ Accel:16 Loops:62 Thr:512 Vec:1 + +* Hash-Mode 21600 (Web2py pbkdf2-sha512) [Iterations: 999] + +Speed.#1.........: 1245.5 kH/s (227.72ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 21700 (Electrum Wallet (Salt-Type 4)) [Iterations: 1023] + +Speed.#1.........: 1227.6 kH/s (257.06ms) @ Accel:256 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 21800 (Electrum Wallet (Salt-Type 5)) [Iterations: 1023] + +Speed.#1.........: 846.4 kH/s (209.60ms) @ Accel:512 Loops:255 Thr:32 Vec:1 + +* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095] + +Speed.#1.........: 988.5 kH/s (324.88ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22001 (WPA-PMK-PMKID+EAPOL) [Iterations: 0] + +Speed.#1.........: 79852.0 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22100 (BitLocker) [Iterations: 1048576] + +Speed.#1.........: 3883 H/s (263.26ms) @ Accel:1024 Loops:4096 Thr:256 Vec:1 + +* Hash-Mode 22200 (Citrix NetScaler (SHA512)) + +Speed.#1.........: 2844.4 MH/s (469.54ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22300 (sha256($salt.$pass.$salt)) + +Speed.#1.........: 7453.4 MH/s (357.31ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 22301 (Telegram Mobile App Passcode (SHA256)) + +Speed.#1.........: 7475.7 MH/s (356.22ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 22400 (AES Crypt (SHA256)) [Iterations: 8191] + +Speed.#1.........: 800.2 kH/s (391.40ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 22500 (MultiBit Classic .key (MD5)) + +Speed.#1.........: 2034.4 MH/s (328.67ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) [Iterations: 3999] + +Speed.#1.........: 288.6 kH/s (278.57ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22700 (MultiBit HD (scrypt)) [Iterations: 16384] + +Speed.#1.........: 3118 H/s (38.66ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) + +Speed.#1.........: 1691.3 MH/s (391.23ms) @ Accel:256 Loops:128 Thr:256 Vec:1 + +* Hash-Mode 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) + +Speed.#1.........: 5637.5 MH/s (231.61ms) @ Accel:256 Loops:128 Thr:512 Vec:1 + +* Hash-Mode 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) + +Speed.#1.........: 2806.8 MH/s (237.01ms) @ Accel:128 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) + +Speed.#1.........: 2348.4 MH/s (283.32ms) @ Accel:256 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) + +Speed.#1.........: 1959.1 MH/s (337.57ms) @ Accel:512 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 23001 (SecureZIP AES-128) + +Speed.#1.........: 2789.9 MH/s (478.75ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 23002 (SecureZIP AES-192) + +Speed.#1.........: 2170.4 MH/s (307.90ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 23003 (SecureZIP AES-256) + +Speed.#1.........: 1784.5 MH/s (374.73ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 23100 (Apple Keychain) [Iterations: 999] + +Speed.#1.........: 3887.6 kH/s (255.08ms) @ Accel:256 Loops:249 Thr:256 Vec:1 + +* Hash-Mode 23200 (XMPP SCRAM PBKDF2-SHA1) [Iterations: 4095] + +Speed.#1.........: 1951.9 kH/s (324.14ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 23300 (Apple iWork) [Iterations: 3999] + +Speed.#1.........: 2007.6 kH/s (316.27ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 23400 (Bitwarden) [Iterations: 99999] + +Speed.#1.........: 35431 H/s (376.40ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 23500 (AxCrypt 2 AES-128) [Iterations: 999] + +Speed.#1.........: 180.9 kH/s (160.14ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 23600 (AxCrypt 2 AES-256) [Iterations: 999] + +Speed.#1.........: 93537 H/s (310.50ms) @ Accel:128 Loops:124 Thr:256 Vec:1 + +* Hash-Mode 23700 (RAR3-p (Uncompressed)) [Iterations: 262144] + +Speed.#1.........: 20568 H/s (6.71ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 23800 (RAR3-p (Compressed)) [Iterations: 262144] + +Speed.#1.........: 19551 H/s (6.70ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 23900 (BestCrypt v3 Volume Encryption) [Iterations: 1] + +Speed.#1.........: 5185.3 kH/s (456.20ms) @ Accel:1024 Loops:1 Thr:32 Vec:1 + +* Hash-Mode 24100 (MongoDB ServerKey SCRAM-SHA-1) [Iterations: 9999] + +Speed.#1.........: 818.3 kH/s (316.32ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24200 (MongoDB ServerKey SCRAM-SHA-256) [Iterations: 14999] + +Speed.#1.........: 235.5 kH/s (377.47ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24300 (sha1($salt.sha1($pass.$salt))) + +Speed.#1.........: 7261.6 MH/s (366.58ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 1913.4 kH/s (327.08ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 1587.6 kH/s (397.56ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) [Iterations: 99999] + +Speed.#1.........: 4201 H/s (318.27ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 24600 (SQLCipher) [Iterations: 63999] + +Speed.#1.........: 63851 H/s (326.13ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24700 (Stuffit5) + +Speed.#1.........: 21767.1 MH/s (243.01ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 24800 (Umbraco HMAC-SHA1) + +Speed.#1.........: 4135.0 MH/s (322.83ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24900 (Dahua Authentication MD5) + +Speed.#1.........: 33354.7 MH/s (313.48ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 305.9 kH/s (126.17ms) @ Accel:8 Loops:131072 Thr:512 Vec:1 + +* Hash-Mode 25100 (SNMPv3 HMAC-MD5-96) [Iterations: 1048576] + +Speed.#1.........: 495.9 kH/s (321.36ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 25200 (SNMPv3 HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 830.6 kH/s (188.36ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 25300 (MS Office 2016 - SheetProtection) [Iterations: 100000] + +Speed.#1.........: 26384 H/s (253.12ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +- +* Hash-Mode 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) [Iterations: 70] +- + +Speed.#1.........: 41902.7 kH/s (31.89ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 25500 (Stargazer Stellar Wallet XLM) [Iterations: 4095] + +Speed.#1.........: 808.1 kH/s (397.66ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 25600 (bcrypt(md5($pass)) / bcryptmd5) [Iterations: 32] + +Speed.#1.........: 90217 H/s (314.28ms) @ Accel:16 Loops:32 Thr:24 Vec:1 + +* Hash-Mode 25700 (MurmurHash) + +Speed.#1.........: 361.7 GH/s (28.55ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 25800 (bcrypt(sha1($pass)) / bcryptsha1) [Iterations: 32] + +Speed.#1.........: 90259 H/s (314.28ms) @ Accel:16 Loops:32 Thr:24 Vec:1 + +- +* Hash-Mode 25900 (KNX IP Secure - Device Authentication Code) [Iterations: 65535] +- + +Speed.#1.........: 53799 H/s (377.71ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 26000 (Mozilla key3.db) + +Speed.#1.........: 172.7 MH/s (242.30ms) @ Accel:4 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 26100 (Mozilla key4.db) [Iterations: 9999] + +Speed.#1.........: 335.2 kH/s (388.35ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 26200 (OpenEdge Progress Encode) + +Speed.#1.........: 98323.7 kH/s (425.67ms) @ Accel:1 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 26300 (FortiGate256 (FortiOS256)) + +Speed.#1.........: 6000.5 MH/s (443.63ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 8238.1 MH/s (323.21ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 7023.3 MH/s (379.13ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 5825.9 MH/s (457.06ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + + +* Hash-Mode 26500 (iPhone passcode (UID key + System Keybag)) [Iterations: 50000] + + +Speed.#1.........: 86177 H/s (309.51ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 26600 (MetaMask Wallet) [Iterations: 9999] + +Speed.#1.........: 334.5 kH/s (388.41ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 26700 (SNMPv3 HMAC-SHA224-128) [Iterations: 1048576] + +Speed.#1.........: 393.9 kH/s (406.81ms) @ Accel:64 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 26800 (SNMPv3 HMAC-SHA256-192) [Iterations: 1048576] + +Speed.#1.........: 394.0 kH/s (406.74ms) @ Accel:64 Loops:131072 Thr:256 Vec:1 + +* Hash-Mode 26900 (SNMPv3 HMAC-SHA384-256) [Iterations: 1048576] + +Speed.#1.........: 282.8 kH/s (275.45ms) @ Accel:8 Loops:262144 Thr:512 Vec:1 + +* Hash-Mode 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) [Iterations: 0] + +Speed.#1.........: 81158.4 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27100 (NetNTLMv2 (NT)) [Iterations: 0] + +Speed.#1.........: 79863.4 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) + +Speed.#1.........: 17756.3 MH/s (297.99ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27300 (SNMPv3 HMAC-SHA512-384) [Iterations: 1048576] + +Speed.#1.........: 282.9 kH/s (275.33ms) @ Accel:8 Loops:262144 Thr:512 Vec:1 + +- +* Hash-Mode 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) [Iterations: 9999] +- + +Speed.#1.........: 407.3 kH/s (318.52ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) [Iterations: 259999] + +Speed.#1.........: 11942 H/s (397.75ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) [Iterations: 159999] + +Speed.#1.........: 9309 H/s (396.58ms) @ Accel:32 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 99999 (Plaintext) + +Speed.#1.........: 102.0 GH/s (102.23ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +Started: Mon Mar 14 17:39:14 2022 +Stopped: Mon Mar 14 20:37:48 2022 \ No newline at end of file diff --git a/tools/benchmarking/g5g-benchmarks.txt b/tools/benchmarking/g5g-benchmarks.txt new file mode 100644 index 0000000..d98a2b8 --- /dev/null +++ b/tools/benchmarking/g5g-benchmarks.txt @@ -0,0 +1,1639 @@ +hashcat (v6.2.5-340-g98b89e43d) starting in benchmark mode + +CUDA API (CUDA 11.4) +==================== +* Device #1: NVIDIA T4G, 15009/15109 MB, 40MCU + +OpenCL API (OpenCL 3.0 CUDA 11.4.153) - Platform #1 [NVIDIA Corporation] +======================================================================== +* Device #2: NVIDIA T4G, skipped + +Benchmark relevant options: +=========================== +* --benchmark-all +* --optimized-kernel-enable +* --workload-profile=4 + +* Hash-Mode 0 (MD5) + +Speed.#1.........: 20804.1 MH/s (244.93ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10 (md5($pass.$salt)) + +Speed.#1.........: 20527.0 MH/s (248.22ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 11 (Joomla < 2.5.18) + +Speed.#1.........: 18987.4 MH/s (268.54ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 12 (PostgreSQL) + +Speed.#1.........: 18703.4 MH/s (271.80ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 20 (md5($salt.$pass)) + +Speed.#1.........: 10949.6 MH/s (467.12ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 21 (osCommerce, xt:Commerce) + +Speed.#1.........: 10895.3 MH/s (469.55ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22 (Juniper NetScreen/SSG (ScreenOS)) + +Speed.#1.........: 10623.7 MH/s (239.54ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 23 (Skype) + +Speed.#1.........: 10484.4 MH/s (242.93ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 24 (SolarWinds Serv-U) + +Speed.#1.........: 10463.5 MH/s (243.47ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 30 (md5(utf16le($pass).$salt)) + +Speed.#1.........: 18035.3 MH/s (281.82ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 40 (md5($salt.utf16le($pass))) + +Speed.#1.........: 10673.4 MH/s (244.11ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 50 (HMAC-MD5 (key = $pass)) + +Speed.#1.........: 3259.1 MH/s (401.20ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 60 (HMAC-MD5 (key = $salt)) + +Speed.#1.........: 6552.2 MH/s (388.81ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 70 (md5(utf16le($pass))) + +Speed.#1.........: 18514.6 MH/s (273.49ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 100 (SHA1) + +Speed.#1.........: 6541.1 MH/s (399.72ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 101 (nsldap, SHA-1(Base64), Netscape LDAP SHA) + +Speed.#1.........: 6530.7 MH/s (400.42ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 110 (sha1($pass.$salt)) + +Speed.#1.........: 6565.6 MH/s (397.46ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 111 (nsldaps, SSHA-1(Base64), Netscape LDAP SSHA) + +Speed.#1.........: 6491.5 MH/s (401.85ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 112 (Oracle S: Type (Oracle 11+)) + +Speed.#1.........: 6567.1 MH/s (398.07ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 120 (sha1($salt.$pass)) + +Speed.#1.........: 5087.7 MH/s (260.25ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 121 (SMF (Simple Machines Forum) > v1.1) + +Speed.#1.........: 5075.1 MH/s (260.90ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 122 (macOS v10.4, macOS v10.5, macOS v10.6) + +Speed.#1.........: 5065.1 MH/s (261.44ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 124 (Django (SHA-1)) + +Speed.#1.........: 5057.4 MH/s (261.83ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 125 (ArubaOS) + +Speed.#1.........: 5065.7 MH/s (261.39ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 130 (sha1(utf16le($pass).$salt)) + +Speed.#1.........: 6602.4 MH/s (395.94ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 131 (MSSQL (2000)) + +Speed.#1.........: 6572.4 MH/s (396.87ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 132 (MSSQL (2005)) + +Speed.#1.........: 6577.9 MH/s (396.45ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 133 (PeopleSoft) + +Speed.#1.........: 6528.1 MH/s (399.50ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 140 (sha1($salt.utf16le($pass))) + +Speed.#1.........: 5079.5 MH/s (260.37ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 141 (Episerver 6.x < .NET 4) + +Speed.#1.........: 5072.1 MH/s (260.69ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 150 (HMAC-SHA1 (key = $pass)) + +Speed.#1.........: 1488.2 MH/s (444.67ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 160 (HMAC-SHA1 (key = $salt)) + +Speed.#1.........: 2758.8 MH/s (239.92ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 170 (sha1(utf16le($pass))) + +Speed.#1.........: 6509.3 MH/s (400.68ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 200 (MySQL323) + +Speed.#1.........: 47164.7 MH/s (108.01ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 300 (MySQL4.1/MySQL5) + +Speed.#1.........: 2837.8 MH/s (466.71ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 400 (phpass) [Iterations: 2048] + +Speed.#1.........: 5144.1 kH/s (397.98ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) [Iterations: 1000] + +Speed.#1.........: 6758.0 kH/s (274.12ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 501 (Juniper IVE) [Iterations: 1000] + +Speed.#1.........: 6714.0 kH/s (276.82ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 600 (BLAKE2b-512) + +Speed.#1.........: 1581.5 MH/s (421.16ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 900 (MD4) + +Speed.#1.........: 31318.5 MH/s (162.70ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 1000 (NTLM) + +Speed.#1.........: 31034.4 MH/s (163.29ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 1100 (Domain Cached Credentials (DCC), MS Cache) + +Speed.#1.........: 9823.8 MH/s (265.35ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1300 (SHA2-224) + +Speed.#1.........: 2785.4 MH/s (239.03ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1400 (SHA2-256) + +Speed.#1.........: 2838.1 MH/s (466.64ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1410 (sha256($pass.$salt)) + +Speed.#1.........: 2835.0 MH/s (466.79ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1411 (SSHA-256(Base64), LDAP {SSHA256}) + +Speed.#1.........: 2841.3 MH/s (466.25ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1420 (sha256($salt.$pass)) + +Speed.#1.........: 2561.1 MH/s (260.04ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1421 (hMailServer) + +Speed.#1.........: 2545.8 MH/s (261.61ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1430 (sha256(utf16le($pass).$salt)) + +Speed.#1.........: 2844.6 MH/s (464.99ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1440 (sha256($salt.utf16le($pass))) + +Speed.#1.........: 2553.6 MH/s (260.65ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1441 (Episerver 6.x >= .NET 4) + +Speed.#1.........: 2547.4 MH/s (261.28ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1450 (HMAC-SHA256 (key = $pass)) + +Speed.#1.........: 553.2 MH/s (302.34ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1460 (HMAC-SHA256 (key = $salt)) + +Speed.#1.........: 1206.6 MH/s (276.79ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1470 (sha256(utf16le($pass))) + +Speed.#1.........: 2832.7 MH/s (466.97ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1500 (descrypt, DES (Unix), Traditional DES) + +Speed.#1.........: 796.1 MH/s (419.56ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) [Iterations: 1000] + +Speed.#1.........: 6756.4 kH/s (274.52ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 1700 (SHA2-512) + +Speed.#1.........: 935.1 MH/s (356.20ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1710 (sha512($pass.$salt)) + +Speed.#1.........: 935.4 MH/s (355.94ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1711 (SSHA-512(Base64), LDAP {SSHA512}) + +Speed.#1.........: 934.8 MH/s (356.25ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1720 (sha512($salt.$pass)) + +Speed.#1.........: 900.6 MH/s (369.67ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1722 (macOS v10.7) + +Speed.#1.........: 898.1 MH/s (370.71ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1730 (sha512(utf16le($pass).$salt)) + +Speed.#1.........: 937.4 MH/s (355.30ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1731 (MSSQL (2012, 2014)) + +Speed.#1.........: 934.4 MH/s (356.30ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1740 (sha512($salt.utf16le($pass))) + +Speed.#1.........: 899.8 MH/s (369.77ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1750 (HMAC-SHA512 (key = $pass)) + +Speed.#1.........: 199.6 MH/s (419.31ms) @ Accel:8 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 1760 (HMAC-SHA512 (key = $salt)) + +Speed.#1.........: 398.1 MH/s (419.48ms) @ Accel:64 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 1770 (sha512(utf16le($pass))) + +Speed.#1.........: 934.9 MH/s (356.03ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 1800 (sha512crypt $6$, SHA512 (Unix)) [Iterations: 5000] + +Speed.#1.........: 108.9 kH/s (242.96ms) @ Accel:16384 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 2000 (STDOUT) + +Speed.#1.........: 36651.9 GH/s (0.03ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) [Iterations: 10239] + +Speed.#1.........: 269.2 kH/s (239.62ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 2400 (Cisco-PIX MD5) + +Speed.#1.........: 13787.2 MH/s (370.44ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 2410 (Cisco-ASA MD5) + +Speed.#1.........: 14228.5 MH/s (183.79ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2600 (md5(md5($pass))) + +Speed.#1.........: 5766.8 MH/s (442.35ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 2611 (vBulletin < v3.8.5) + +Speed.#1.........: 5780.1 MH/s (441.25ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 2612 (PHPS) + +Speed.#1.........: 5995.0 MH/s (435.93ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2711 (vBulletin >= v3.8.5) + +Speed.#1.........: 4341.3 MH/s (304.83ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 2811 (MyBB 1.2+, IPB2+ (Invision Power Board)) + +Speed.#1.........: 4509.4 MH/s (293.58ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 3000 (LM) + +Speed.#1.........: 19727.5 MH/s (66.96ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 3100 (Oracle H: Type (Oracle 7+)) + +Speed.#1.........: 343.8 MH/s (243.33ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3200 (bcrypt $2*$, Blowfish (Unix)) [Iterations: 32] + +Speed.#1.........: 27757 H/s (348.03ms) @ Accel:16 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 3500 (md5(md5(md5($pass)))) + +Speed.#1.........: 3823.0 MH/s (346.38ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 3710 (md5($salt.md5($pass))) + +Speed.#1.........: 5348.4 MH/s (244.28ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 3711 (MediaWiki B type) + +Speed.#1.........: 5346.9 MH/s (244.30ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 3800 (md5($salt.$pass.$salt)) + +Speed.#1.........: 10547.4 MH/s (241.42ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 3910 (md5(md5($pass).md5($salt))) + +Speed.#1.........: 4264.8 MH/s (310.33ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4010 (md5($salt.md5($salt.$pass))) + +Speed.#1.........: 4821.4 MH/s (274.60ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 4110 (md5($salt.md5($pass.$salt))) + +Speed.#1.........: 5434.0 MH/s (240.66ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4300 (md5(strtoupper(md5($pass)))) + +Speed.#1.........: 5790.7 MH/s (440.40ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 + +* Hash-Mode 4400 (md5(sha1($pass))) + +Speed.#1.........: 3466.2 MH/s (377.52ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 4500 (sha1(sha1($pass))) + +Speed.#1.........: 2557.1 MH/s (260.46ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 4510 (sha1(sha1($pass).$salt)) + +Speed.#1.........: 2429.4 MH/s (274.12ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 4520 (sha1($salt.sha1($pass))) + +Speed.#1.........: 1556.8 MH/s (427.92ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 4521 (Redmine) + +Speed.#1.........: 1559.2 MH/s (424.80ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 4522 (PunBB) + +Speed.#1.........: 2369.2 MH/s (281.14ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 4700 (sha1(md5($pass))) + +Speed.#1.........: 3487.8 MH/s (365.88ms) @ Accel:256 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 4710 (sha1(md5($pass).$salt)) + +Speed.#1.........: 3327.2 MH/s (392.71ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4711 (Huawei sha1(md5($pass).$salt)) + +Speed.#1.........: 3322.5 MH/s (393.29ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 4800 (iSCSI CHAP authentication, MD5(CHAP)) + +Speed.#1.........: 13966.1 MH/s (187.10ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 4900 (sha1($salt.$pass.$salt)) + +Speed.#1.........: 4917.3 MH/s (269.18ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 5000 (sha1(sha1($salt.$pass.$salt))) + +Speed.#1.........: 2371.3 MH/s (280.88ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 5100 (Half MD5) + +Speed.#1.........: 12423.5 MH/s (411.26ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5200 (Password Safe v3) [Iterations: 2049] + +Speed.#1.........: 1106.5 kH/s (186.21ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 5300 (IKE-PSK MD5) + +Speed.#1.........: 754.0 MH/s (442.90ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 5400 (IKE-PSK SHA1) + +Speed.#1.........: 339.0 MH/s (246.82ms) @ Accel:64 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 5500 (NetNTLMv1 / NetNTLMv1+ESS) + +Speed.#1.........: 19933.0 MH/s (253.98ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 5600 (NetNTLMv2) + +Speed.#1.........: 1463.1 MH/s (454.91ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 5700 (Cisco-IOS type 4 (SHA256)) + +Speed.#1.........: 2874.1 MH/s (460.68ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 5800 (Samsung Android Password/PIN) [Iterations: 1023] + +Speed.#1.........: 3955.8 kH/s (271.38ms) @ Accel:256 Loops:1023 Thr:128 Vec:1 + +* Hash-Mode 6000 (RIPEMD-160) + +Speed.#1.........: 4485.3 MH/s (295.17ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 6100 (Whirlpool) + +Speed.#1.........: 267.4 MH/s (312.87ms) @ Accel:8 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) [Iterations: 1999] + +Speed.#1.........: 252.8 kH/s (298.58ms) @ Accel:128 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 1999] + +Speed.#1.........: 150.6 kH/s (274.54ms) @ Accel:128 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 1999] + +Speed.#1.........: 105.5 kH/s (391.85ms) @ Accel:128 Loops:128 Thr:128 Vec:1 + +* Hash-Mode 6221 (TrueCrypt SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 360.2 kH/s (263.00ms) @ Accel:128 Loops:499 Thr:64 Vec:1 + +* Hash-Mode 6222 (TrueCrypt SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 175.5 kH/s (262.79ms) @ Accel:32 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 6223 (TrueCrypt SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 108.9 kH/s (299.32ms) @ Accel:4 Loops:999 Thr:256 Vec:1 + +* Hash-Mode 6231 (TrueCrypt Whirlpool + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 31607 H/s (206.76ms) @ Accel:4 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 6232 (TrueCrypt Whirlpool + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 15621 H/s (208.66ms) @ Accel:2 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 6233 (TrueCrypt Whirlpool + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 10632 H/s (375.75ms) @ Accel:4 Loops:249 Thr:128 Vec:1 + +* Hash-Mode 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 458.2 kH/s (275.00ms) @ Accel:256 Loops:124 Thr:128 Vec:1 + +* Hash-Mode 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 248.2 kH/s (239.23ms) @ Accel:128 Loops:124 Thr:128 Vec:1 + +* Hash-Mode 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 999] + +Speed.#1.........: 170.4 kH/s (342.12ms) @ Accel:128 Loops:124 Thr:128 Vec:1 + +* Hash-Mode 6300 (AIX {smd5}) [Iterations: 1000] + +Speed.#1.........: 6761.3 kH/s (274.28ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 + +* Hash-Mode 6400 (AIX {ssha256}) [Iterations: 63] + +Speed.#1.........: 9846.5 kH/s (291.56ms) @ Accel:512 Loops:63 Thr:256 Vec:1 + +* Hash-Mode 6500 (AIX {ssha512}) [Iterations: 63] + +Speed.#1.........: 4767.0 kH/s (394.82ms) @ Accel:512 Loops:63 Thr:128 Vec:1 + +* Hash-Mode 6600 (1Password, agilekeychain) [Iterations: 999] + +Speed.#1.........: 2457.0 kH/s (467.54ms) @ Accel:256 Loops:999 Thr:128 Vec:1 + +* Hash-Mode 6700 (AIX {ssha1}) [Iterations: 63] + +Speed.#1.........: 15408.9 kH/s (51.33ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 + +* Hash-Mode 6800 (LastPass + LastPass sniffed) [Iterations: 499] + +Speed.#1.........: 2045.5 kH/s (276.79ms) @ Accel:64 Loops:499 Thr:256 Vec:1 + +* Hash-Mode 6900 (GOST R 34.11-94) + +Speed.#1.........: 188.7 MH/s (438.05ms) @ Accel:64 Loops:64 Thr:512 Vec:1 + +* Hash-Mode 7000 (FortiGate (FortiOS)) + +Speed.#1.........: 5731.8 MH/s (456.40ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 7100 (macOS v10.8+ (PBKDF2-SHA512)) [Iterations: 1023] + +Speed.#1.........: 379.7 kH/s (407.57ms) @ Accel:32 Loops:1023 Thr:128 Vec:1 + +* Hash-Mode 7200 (GRUB 2) [Iterations: 1023] + +Speed.#1.........: 382.7 kH/s (404.14ms) @ Accel:32 Loops:1023 Thr:128 Vec:1 + +* Hash-Mode 7300 (IPMI2 RAKP HMAC-SHA1) + +Speed.#1.........: 863.5 MH/s (385.73ms) @ Accel:128 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 7400 (sha256crypt $5$, SHA256 (Unix)) [Iterations: 5000] + +Speed.#1.........: 250.5 kH/s (253.17ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 7401 (MySQL $A$ (sha256crypt)) [Iterations: 5000] + +Speed.#1.........: 238.1 kH/s (266.19ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) + +Speed.#1.........: 398.5 MH/s (419.57ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 7700 (SAP CODVN B (BCODE)) + +Speed.#1.........: 1717.8 MH/s (193.83ms) @ Accel:512 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) + +Speed.#1.........: 1722.5 MH/s (384.51ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 7800 (SAP CODVN F/G (PASSCODE)) + +Speed.#1.........: 930.9 MH/s (357.85ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) + +Speed.#1.........: 930.6 MH/s (357.98ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 7900 (Drupal7) [Iterations: 16384] + +Speed.#1.........: 50224 H/s (403.78ms) @ Accel:128 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 8000 (Sybase ASE) + +Speed.#1.........: 317.0 MH/s (263.94ms) @ Accel:8 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 8100 (Citrix NetScaler (SHA1)) + +Speed.#1.........: 5553.0 MH/s (471.56ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8200 (1Password, cloudkeychain) [Iterations: 39999] + +Speed.#1.........: 10161 H/s (410.35ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 8300 (DNSSEC (NSEC3)) + +Speed.#1.........: 2442.7 MH/s (272.61ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 8400 (WBB3 (Woltlab Burning Board)) + +Speed.#1.........: 1040.5 MH/s (320.98ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 8500 (RACF) + +Speed.#1.........: 1936.8 MH/s (343.81ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 8600 (Lotus Notes/Domino 5) + +Speed.#1.........: 169.7 MH/s (246.62ms) @ Accel:1 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 8700 (Lotus Notes/Domino 6) + +Speed.#1.........: 55122.7 kH/s (379.52ms) @ Accel:64 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 8800 (Android FDE <= 4.3) [Iterations: 1999] + +Speed.#1.........: 635.4 kH/s (244.69ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 8900 (scrypt) [Iterations: 16384] + +Speed.#1.........: 1234 H/s (47.19ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9000 (Password Safe v2) [Iterations: 1000] + +Speed.#1.........: 576.5 kH/s (339.74ms) @ Accel:512 Loops:1000 Thr:16 Vec:1 + +* Hash-Mode 9100 (Lotus Notes/Domino 8) [Iterations: 4999] + +Speed.#1.........: 523.3 kH/s (240.86ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) [Iterations: 19999] + +Speed.#1.........: 55805 H/s (298.61ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 9300 (Cisco-IOS $9$ (scrypt)) [Iterations: 16384] + +Speed.#1.........: 18647 H/s (2.07ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9400 (MS Office 2007) [Iterations: 50000] + +Speed.#1.........: 110.4 kH/s (239.59ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 9500 (MS Office 2010) [Iterations: 100000] + +Speed.#1.........: 54354 H/s (481.06ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 9600 (MS Office 2013) [Iterations: 100000] + +Speed.#1.........: 8677 H/s (307.21ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) + +Speed.#1.........: 373.1 MH/s (447.91ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) + +Speed.#1.........: 438.8 MH/s (356.11ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) + +Speed.#1.........: 1668.7 MH/s (396.41ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) + +Speed.#1.........: 393.5 MH/s (424.74ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) + +Speed.#1.........: 433.0 MH/s (361.09ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) + +Speed.#1.........: 2689.6 MH/s (247.72ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 9900 (Radmin2) + +Speed.#1.........: 6779.9 MH/s (376.91ms) @ Accel:512 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10000 (Django (PBKDF2-SHA256)) [Iterations: 9999] + +Speed.#1.........: 111.5 kH/s (291.06ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 10100 (SipHash) + +Speed.#1.........: 21701.3 MH/s (235.05ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 10200 (CRAM-MD5) + +Speed.#1.........: 3252.8 MH/s (402.04ms) @ Accel:256 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) [Iterations: 1023] + +Speed.#1.........: 3828.7 kH/s (282.37ms) @ Accel:128 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) + +Speed.#1.........: 510.3 MH/s (328.08ms) @ Accel:128 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) + +Speed.#1.........: 504.7 MH/s (305.83ms) @ Accel:512 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) + +Speed.#1.........: 7021.9 MH/s (188.64ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) [Iterations: 70] + +Speed.#1.........: 12324.1 kH/s (50.16ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 10600 (PDF 1.7 Level 3 (Acrobat 9)) + +Speed.#1.........: 2834.3 MH/s (233.13ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) [Iterations: 64] + +Speed.#1.........: 44787 H/s (454.84ms) @ Accel:32 Loops:4 Thr:256 Vec:1 + +* Hash-Mode 10800 (SHA2-384) + +Speed.#1.........: 923.1 MH/s (360.87ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10810 (sha384($pass.$salt)) + +Speed.#1.........: 919.0 MH/s (362.10ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10820 (sha384($salt.$pass)) + +Speed.#1.........: 885.4 MH/s (376.07ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10830 (sha384(utf16le($pass).$salt)) + +Speed.#1.........: 925.2 MH/s (360.07ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10840 (sha384($salt.utf16le($pass))) + +Speed.#1.........: 886.4 MH/s (375.41ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10870 (sha384(utf16le($pass))) + +Speed.#1.........: 920.6 MH/s (361.37ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 10900 (PBKDF2-HMAC-SHA256) [Iterations: 999] + +Speed.#1.........: 1053.3 kH/s (280.80ms) @ Accel:32 Loops:999 Thr:256 Vec:1 + +* Hash-Mode 10901 (RedHat 389-DS LDAP (PBKDF2-HMAC-SHA256)) [Iterations: 8191] + +Speed.#1.........: 135.5 kH/s (298.76ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 11000 (PrestaShop) + +Speed.#1.........: 7194.6 MH/s (354.17ms) @ Accel:2048 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 11100 (PostgreSQL CRAM (MD5)) + +Speed.#1.........: 6097.5 MH/s (429.58ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 11200 (MySQL CRAM (SHA1)) + +Speed.#1.........: 1753.1 MH/s (377.66ms) @ Accel:256 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11300 (Bitcoin/Litecoin wallet.dat) [Iterations: 200459] + +Speed.#1.........: 4281 H/s (387.48ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 11400 (SIP digest authentication (MD5)) + +Speed.#1.........: 2744.4 MH/s (242.65ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 11500 (CRC32) + +Speed.#1.........: 7438.5 MH/s (177.90ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 11600 (7-Zip) [Iterations: 16384] + +Speed.#1.........: 276.8 kH/s (280.67ms) @ Accel:64 Loops:4096 Thr:128 Vec:1 + +* Hash-Mode 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) + +Speed.#1.........: 40564.6 kH/s (258.03ms) @ Accel:1 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 11750 (HMAC-Streebog-256 (key = $pass), big-endian) + +Speed.#1.........: 14392.1 kH/s (363.63ms) @ Accel:4 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 11760 (HMAC-Streebog-256 (key = $salt), big-endian) + +Speed.#1.........: 20061.2 kH/s (260.87ms) @ Accel:2 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) + +Speed.#1.........: 40614.2 kH/s (257.71ms) @ Accel:2 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 11850 (HMAC-Streebog-512 (key = $pass), big-endian) + +Speed.#1.........: 12576.5 kH/s (416.17ms) @ Accel:4 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 11860 (HMAC-Streebog-512 (key = $salt), big-endian) + +Speed.#1.........: 16753.2 kH/s (312.40ms) @ Accel:2 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 11900 (PBKDF2-HMAC-MD5) [Iterations: 999] + +Speed.#1.........: 5055.7 kH/s (263.81ms) @ Accel:1024 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 12000 (PBKDF2-HMAC-SHA1) [Iterations: 999] + +Speed.#1.........: 2357.5 kH/s (235.63ms) @ Accel:128 Loops:999 Thr:128 Vec:1 + +* Hash-Mode 12001 (Atlassian (PBKDF2-HMAC-SHA1)) [Iterations: 9999] + +Speed.#1.........: 266.7 kH/s (241.50ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 12100 (PBKDF2-HMAC-SHA512) [Iterations: 999] + +Speed.#1.........: 389.0 kH/s (397.37ms) @ Accel:64 Loops:999 Thr:64 Vec:1 + +* Hash-Mode 12200 (eCryptfs) [Iterations: 65536] + +Speed.#1.........: 12973 H/s (391.21ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 12300 (Oracle T: Type (Oracle 12+)) [Iterations: 4095] + +Speed.#1.........: 98703 H/s (408.82ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 12400 (BSDi Crypt, Extended DES) [Iterations: 2194] + +Speed.#1.........: 1444.9 kH/s (337.79ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 12500 (RAR3-hp) [Iterations: 262144] + +Speed.#1.........: 31956 H/s (318.21ms) @ Accel:128 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 12600 (ColdFusion 10+) + +Speed.#1.........: 1607.9 MH/s (414.18ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 12700 (Blockchain, My Wallet) [Iterations: 9] + +Speed.#1.........: 18536.5 kH/s (13.00ms) @ Accel:256 Loops:9 Thr:256 Vec:1 + +* Hash-Mode 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) [Iterations: 99] + +Speed.#1.........: 6780.2 kH/s (216.66ms) @ Accel:256 Loops:99 Thr:256 Vec:1 + +* Hash-Mode 12900 (Android FDE (Samsung DEK)) [Iterations: 4095] + +Speed.#1.........: 276.3 kH/s (288.70ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 13000 (RAR5) [Iterations: 32799] + +Speed.#1.........: 35129 H/s (287.90ms) @ Accel:128 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 13100 (Kerberos 5, etype 23, TGS-REP) + +Speed.#1.........: 391.0 MH/s (427.63ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 13200 (AxCrypt 1) [Iterations: 10467] + +Speed.#1.........: 87363 H/s (361.26ms) @ Accel:256 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 13300 (AxCrypt 1 in-memory SHA1) + +Speed.#1.........: 6079.9 MH/s (430.87ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) [Iterations: 24569] + +Speed.#1.........: 26820 H/s (253.27ms) @ Accel:16 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 13500 (PeopleSoft PS_TOKEN) + +Speed.#1.........: 4844.7 MH/s (272.86ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 13600 (WinZip) [Iterations: 999] + +Speed.#1.........: 2364.4 kH/s (478.76ms) @ Accel:128 Loops:999 Thr:256 Vec:1 + +* Hash-Mode 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) [Iterations: 655330] + +Speed.#1.........: 771 H/s (128.66ms) @ Accel:16384 Loops:250 Thr:32 Vec:1 + +* Hash-Mode 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) [Iterations: 655330] + +Speed.#1.........: 453 H/s (110.12ms) @ Accel:2048 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) [Iterations: 655330] + +Speed.#1.........: 315 H/s (158.13ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 13721 (VeraCrypt SHA512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 814 H/s (160.12ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 + +* Hash-Mode 13722 (VeraCrypt SHA512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 398 H/s (163.49ms) @ Accel:1024 Loops:250 Thr:256 Vec:1 + +* Hash-Mode 13723 (VeraCrypt SHA512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 254 H/s (128.48ms) @ Accel:256 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 13731 (VeraCrypt Whirlpool + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 60 H/s (135.60ms) @ Accel:128 Loops:1000 Thr:64 Vec:1 + +* Hash-Mode 13732 (VeraCrypt Whirlpool + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 30 H/s (133.09ms) @ Accel:128 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 13733 (VeraCrypt Whirlpool + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 20 H/s (203.58ms) @ Accel:128 Loops:500 Thr:64 Vec:1 + +* Hash-Mode 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 1578 H/s (128.68ms) @ Accel:4096 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 918 H/s (111.19ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) [Iterations: 327660] + +Speed.#1.........: 645 H/s (158.37ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 13751 (VeraCrypt SHA256 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 1152 H/s (225.47ms) @ Accel:4096 Loops:500 Thr:128 Vec:1 + +* Hash-Mode 13752 (VeraCrypt SHA256 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 566 H/s (229.52ms) @ Accel:4096 Loops:250 Thr:128 Vec:1 + +* Hash-Mode 13753 (VeraCrypt SHA256 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 378 H/s (172.14ms) @ Accel:8192 Loops:250 Thr:32 Vec:1 + +* Hash-Mode 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 2879 H/s (231.86ms) @ Accel:2048 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 1435 H/s (231.57ms) @ Accel:4096 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 959 H/s (174.01ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 + +* Hash-Mode 13771 (VeraCrypt Streebog-512 + XTS 512 bit) [Iterations: 499999] + +Speed.#1.........: 24 H/s (172.27ms) @ Accel:128 Loops:1000 Thr:32 Vec:1 + +* Hash-Mode 13772 (VeraCrypt Streebog-512 + XTS 1024 bit) [Iterations: 499999] + +Speed.#1.........: 12 H/s (173.39ms) @ Accel:128 Loops:500 Thr:32 Vec:1 + +* Hash-Mode 13773 (VeraCrypt Streebog-512 + XTS 1536 bit) [Iterations: 499999] + +Speed.#1.........: 8 H/s (129.75ms) @ Accel:128 Loops:250 Thr:32 Vec:1 + +* Hash-Mode 13781 (VeraCrypt Streebog-512 + XTS 512 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 59 H/s (176.24ms) @ Accel:128 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 13782 (VeraCrypt Streebog-512 + XTS 1024 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 30 H/s (174.96ms) @ Accel:128 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 13783 (VeraCrypt Streebog-512 + XTS 1536 bit + boot-mode) [Iterations: 199999] + +Speed.#1.........: 20 H/s (131.43ms) @ Accel:128 Loops:256 Thr:32 Vec:1 + +* Hash-Mode 13800 (Windows Phone 8+ PIN/password) + +Speed.#1.........: 727.4 MH/s (459.02ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 13900 (OpenCart) + +Speed.#1.........: 1606.9 MH/s (411.96ms) @ Accel:512 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 14000 (DES (PT = $salt, key = $pass)) + +Speed.#1.........: 19066.2 MH/s (69.29ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 14100 (3DES (PT = $salt, key = $pass)) + +Speed.#1.........: 1992.3 MH/s (334.14ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 14400 (sha1(CX)) + +Speed.#1.........: 312.1 MH/s (268.04ms) @ Accel:64 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 14500 (Linux Kernel Crypto API (2.4)) + +Speed.#1.........: 630.7 MH/s (265.13ms) @ Accel:128 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 14600 (LUKS) [Iterations: 163044] + +Speed.#1.........: 8107 H/s (251.41ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 14700 (iTunes backup < 10.0) [Iterations: 9999] + +Speed.#1.........: 131.9 kH/s (244.79ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 14800 (iTunes backup >= 10.0) [Iterations: 9999999] + +Speed.#1.........: 112 H/s (237.75ms) @ Accel:4096 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 14900 (Skip32 (PT = $salt, key = $pass)) + +Speed.#1.........: 4038.6 MH/s (16.53ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 15000 (FileZilla Server >= 0.9.55) + +Speed.#1.........: 831.5 MH/s (400.43ms) @ Accel:256 Loops:512 Thr:64 Vec:1 + +* Hash-Mode 15100 (Juniper/NetBSD sha1crypt) [Iterations: 19999] + +Speed.#1.........: 135.9 kH/s (244.47ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 15200 (Blockchain, My Wallet, V2) [Iterations: 4999] + +Speed.#1.........: 264.7 kH/s (242.72ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 15300 (DPAPI masterkey file v1 (context 1 and 2)) [Iterations: 23999] + +Speed.#1.........: 57102 H/s (243.27ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 15310 (DPAPI masterkey file v1 (context 3)) [Iterations: 9999] + +Speed.#1.........: 48371 H/s (292.53ms) @ Accel:128 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 15400 (ChaCha20) + +Speed.#1.........: 3277.3 MH/s (1571.10ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 15500 (JKS Java Key Store Private Keys (SHA1)) + +Speed.#1.........: 6211.8 MH/s (421.04ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1023] + +Speed.#1.........: 1048.9 kH/s (281.82ms) @ Accel:32 Loops:1023 Thr:256 Vec:1 + +* Hash-Mode 15700 (Ethereum Wallet, SCRYPT) [Iterations: 262144] + +Speed.#1.........: 0 H/s (12.45ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 + +* Hash-Mode 15900 (DPAPI masterkey file v2 (context 1 and 2)) [Iterations: 12899] + +Speed.#1.........: 32059 H/s (402.08ms) @ Accel:64 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 15910 (DPAPI masterkey file v2 (context 3)) [Iterations: 9999] + +Speed.#1.........: 24533 H/s (553.93ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16000 (Tripcode) + +Speed.#1.........: 133.5 MH/s (313.52ms) @ Accel:32 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 16100 (TACACS+) + +Speed.#1.........: 13354.3 MH/s (195.65ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 16200 (Apple Secure Notes) [Iterations: 19999] + +Speed.#1.........: 58573 H/s (284.62ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) [Iterations: 1999] + +Speed.#1.........: 550.9 kH/s (277.77ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 16400 (CRAM-MD5 Dovecot) + +Speed.#1.........: 18172.5 MH/s (280.43ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16500 (JWT (JSON Web Token)) + +Speed.#1.........: 549.0 MH/s (304.63ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16600 (Electrum Wallet (Salt-Type 1-3)) + +Speed.#1.........: 380.8 MH/s (439.31ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 16700 (FileVault 2) [Iterations: 19999] + +Speed.#1.........: 56565 H/s (294.91ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 16900 (Ansible Vault) [Iterations: 9999] + +Speed.#1.........: 115.2 kH/s (281.30ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17010 (GPG (AES-128/AES-256 (SHA-1($pass)))) [Iterations: 65536] + +Speed.#1.........: 2582.8 kH/s (194.86ms) @ Accel:64 Loops:65536 Thr:256 Vec:1 + +* Hash-Mode 17200 (PKZIP (Compressed)) + +Speed.#1.........: 2895.4 MH/s (228.81ms) @ Accel:1024 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 17210 (PKZIP (Uncompressed)) + +Speed.#1.........: 1229.7 MH/s (134.47ms) @ Accel:512 Loops:128 Thr:64 Vec:1 + +* Hash-Mode 17220 (PKZIP (Compressed Multi-File)) + +Speed.#1.........: 5186.4 MH/s (255.47ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 17225 (PKZIP (Mixed Multi-File)) + +Speed.#1.........: 5837.5 MH/s (226.97ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 17230 (PKZIP (Mixed Multi-File Checksum-Only)) + +Speed.#1.........: 5627.6 MH/s (232.15ms) @ Accel:512 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 17300 (SHA3-224) + +Speed.#1.........: 658.6 MH/s (253.88ms) @ Accel:64 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 17400 (SHA3-256) + +Speed.#1.........: 662.8 MH/s (252.24ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 17500 (SHA3-384) + +Speed.#1.........: 661.4 MH/s (252.77ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 17600 (SHA3-512) + +Speed.#1.........: 660.5 MH/s (253.16ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 17700 (Keccak-224) + +Speed.#1.........: 659.3 MH/s (253.63ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 17800 (Keccak-256) + +Speed.#1.........: 662.2 MH/s (252.52ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 17900 (Keccak-384) + +Speed.#1.........: 659.8 MH/s (253.05ms) @ Accel:16 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 18000 (Keccak-512) + +Speed.#1.........: 660.2 MH/s (253.28ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 18100 (TOTP (HMAC-SHA1)) + +Speed.#1.........: 1348.1 MH/s (247.01ms) @ Accel:128 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 18200 (Kerberos 5, etype 23, AS-REP) + +Speed.#1.........: 389.5 MH/s (429.22ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 18300 (Apple File System (APFS)) [Iterations: 19999] + +Speed.#1.........: 58130 H/s (286.79ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) [Iterations: 99999] + +Speed.#1.........: 13522 H/s (246.76ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 18500 (sha1(md5(md5($pass)))) + +Speed.#1.........: 2368.9 MH/s (281.16ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) [Iterations: 1023] + +Speed.#1.........: 655.3 kH/s (228.81ms) @ Accel:128 Loops:1023 Thr:64 Vec:1 + +* Hash-Mode 18700 (Java Object hashCode()) + +Speed.#1.........: 101.8 GH/s (49.89ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 18800 (Blockchain, My Wallet, Second Password (SHA256)) [Iterations: 9999] + +Speed.#1.........: 236.0 kH/s (274.29ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 18900 (Android Backup) [Iterations: 9999] + +Speed.#1.........: 135.0 kH/s (240.12ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 19000 (QNX /etc/shadow (MD5)) [Iterations: 1000] + +Speed.#1.........: 12974.3 kH/s (83.32ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 + +* Hash-Mode 19100 (QNX /etc/shadow (SHA256)) [Iterations: 1000] + +Speed.#1.........: 8310.0 kH/s (195.26ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 + +* Hash-Mode 19200 (QNX /etc/shadow (SHA512)) [Iterations: 1000] + +Speed.#1.........: 5746.7 kH/s (156.72ms) @ Accel:128 Loops:1000 Thr:256 Vec:1 + +* Hash-Mode 19300 (sha1($salt1.$pass.$salt2)) + +Speed.#1.........: 766.6 MH/s (218.13ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 19500 (Ruby on Rails Restful-Authentication) + +Speed.#1.........: 86195.2 kH/s (242.78ms) @ Accel:4 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 19600 (Kerberos 5, etype 17, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 642.7 kH/s (244.89ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 19700 (Kerberos 5, etype 18, TGS-REP) [Iterations: 4095] + +Speed.#1.........: 323.9 kH/s (246.02ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 19800 (Kerberos 5, etype 17, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 647.7 kH/s (243.13ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 19900 (Kerberos 5, etype 18, Pre-Auth) [Iterations: 4095] + +Speed.#1.........: 326.0 kH/s (244.57ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20011 (DiskCryptor SHA512 + XTS 512 bit) [Iterations: 999] + +Speed.#1.........: 370.3 kH/s (261.17ms) @ Accel:256 Loops:499 Thr:32 Vec:1 + +* Hash-Mode 20012 (DiskCryptor SHA512 + XTS 1024 bit) [Iterations: 999] + +Speed.#1.........: 179.7 kH/s (265.59ms) @ Accel:16 Loops:499 Thr:256 Vec:1 + +* Hash-Mode 20013 (DiskCryptor SHA512 + XTS 1536 bit) [Iterations: 999] + +Speed.#1.........: 114.6 kH/s (296.81ms) @ Accel:4 Loops:999 Thr:256 Vec:1 + +* Hash-Mode 20200 (Python passlib pbkdf2-sha512) [Iterations: 24999] + +Speed.#1.........: 16333 H/s (407.60ms) @ Accel:64 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 20300 (Python passlib pbkdf2-sha256) [Iterations: 28999] + +Speed.#1.........: 38768 H/s (296.43ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 20400 (Python passlib pbkdf2-sha1) [Iterations: 130999] + +Speed.#1.........: 20665 H/s (245.37ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20500 (PKZIP Master Key) + +Speed.#1.........: 63849.4 MH/s (79.66ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20510 (PKZIP Master Key (6 byte optimization)) + +Speed.#1.........: 12982.2 MH/s (201.35ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20600 (Oracle Transportation Management (SHA256)) [Iterations: 999] + +Speed.#1.........: 2183.5 kH/s (266.54ms) @ Accel:128 Loops:999 Thr:128 Vec:1 + +* Hash-Mode 20710 (sha256(sha256($pass).$salt)) + +Speed.#1.........: 766.5 MH/s (217.84ms) @ Accel:64 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 20711 (AuthMe sha256) + +Speed.#1.........: 763.3 MH/s (218.76ms) @ Accel:256 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 20720 (sha256($salt.sha256($pass))) + +Speed.#1.........: 677.8 MH/s (246.72ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 20800 (sha256(md5($pass))) + +Speed.#1.........: 2175.4 MH/s (306.07ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 20900 (md5(sha1($pass).md5($pass).sha1($pass))) + +Speed.#1.........: 2036.0 MH/s (327.17ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 21000 (BitShares v0.x - sha512(sha512_bin(pass))) + +Speed.#1.........: 444.4 MH/s (375.79ms) @ Accel:32 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 21100 (sha1(md5($pass.$salt))) + +Speed.#1.........: 3603.2 MH/s (362.80ms) @ Accel:128 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 21200 (md5(sha1($salt).md5($pass))) + +Speed.#1.........: 4451.5 MH/s (297.44ms) @ Accel:128 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 21300 (md5($salt.sha1($salt.$pass))) + +Speed.#1.........: 2562.5 MH/s (259.89ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 21400 (sha256(sha256_bin($pass))) + +Speed.#1.........: 1283.6 MH/s (260.20ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 21420 (sha256($salt.sha256_bin($pass))) + +Speed.#1.........: 692.2 MH/s (241.58ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 21500 (SolarWinds Orion) [Iterations: 999] + +Speed.#1.........: 47474 H/s (411.78ms) @ Accel:64 Loops:62 Thr:128 Vec:1 + +* Hash-Mode 21501 (SolarWinds Orion v2) [Iterations: 999] + +Speed.#1.........: 47686 H/s (409.70ms) @ Accel:64 Loops:62 Thr:128 Vec:1 + +* Hash-Mode 21600 (Web2py pbkdf2-sha512) [Iterations: 999] + +Speed.#1.........: 395.5 kH/s (265.19ms) @ Accel:64 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 21700 (Electrum Wallet (Salt-Type 4)) [Iterations: 1023] + +Speed.#1.........: 270.7 kH/s (405.69ms) @ Accel:32 Loops:1023 Thr:128 Vec:1 + +* Hash-Mode 21800 (Electrum Wallet (Salt-Type 5)) [Iterations: 1023] + +Speed.#1.........: 267.6 kH/s (267.72ms) @ Accel:256 Loops:511 Thr:32 Vec:1 + +* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095] + +Speed.#1.........: 322.5 kH/s (247.86ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 22001 (WPA-PMK-PMKID+EAPOL) [Iterations: 0] + +Speed.#1.........: 20279.8 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 22100 (BitLocker) [Iterations: 1048576] + +Speed.#1.........: 1315 H/s (388.62ms) @ Accel:512 Loops:4096 Thr:256 Vec:1 + +* Hash-Mode 22200 (Citrix NetScaler (SHA512)) + +Speed.#1.........: 926.6 MH/s (359.53ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 22300 (sha256($salt.$pass.$salt)) + +Speed.#1.........: 2517.3 MH/s (264.60ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 22301 (Telegram Mobile App Passcode (SHA256)) + +Speed.#1.........: 2512.0 MH/s (265.02ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22400 (AES Crypt (SHA256)) [Iterations: 8191] + +Speed.#1.........: 263.3 kH/s (301.44ms) @ Accel:128 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 22500 (MultiBit Classic .key (MD5)) + +Speed.#1.........: 414.8 MH/s (402.48ms) @ Accel:32 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) [Iterations: 3999] + +Speed.#1.........: 94924 H/s (425.19ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 22700 (MultiBit HD (scrypt)) [Iterations: 16384] + +Speed.#1.........: 1269 H/s (45.64ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) + +Speed.#1.........: 417.2 MH/s (400.12ms) @ Accel:16 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) + +Speed.#1.........: 1375.1 MH/s (242.81ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) + +Speed.#1.........: 589.1 MH/s (283.90ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) + +Speed.#1.........: 469.5 MH/s (354.64ms) @ Accel:64 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) + +Speed.#1.........: 395.2 MH/s (422.57ms) @ Accel:32 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 23001 (SecureZIP AES-128) + +Speed.#1.........: 556.1 MH/s (300.68ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23002 (SecureZIP AES-192) + +Speed.#1.........: 430.0 MH/s (388.93ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23003 (SecureZIP AES-256) + +Speed.#1.........: 357.5 MH/s (234.02ms) @ Accel:16 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23100 (Apple Keychain) [Iterations: 999] + +Speed.#1.........: 1242.0 kH/s (240.09ms) @ Accel:128 Loops:999 Thr:64 Vec:1 + +* Hash-Mode 23200 (XMPP SCRAM PBKDF2-SHA1) [Iterations: 4095] + +Speed.#1.........: 639.2 kH/s (245.59ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23300 (Apple iWork) [Iterations: 3999] + +Speed.#1.........: 658.8 kH/s (239.26ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 23400 (Bitwarden) [Iterations: 99999] + +Speed.#1.........: 11528 H/s (289.24ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 23500 (AxCrypt 2 AES-128) [Iterations: 999] + +Speed.#1.........: 40332 H/s (337.16ms) @ Accel:64 Loops:499 Thr:128 Vec:1 + +* Hash-Mode 23600 (AxCrypt 2 AES-256) [Iterations: 999] + +Speed.#1.........: 20462 H/s (665.78ms) @ Accel:128 Loops:499 Thr:64 Vec:1 + +* Hash-Mode 23700 (RAR3-p (Uncompressed)) [Iterations: 262144] + +Speed.#1.........: 31991 H/s (317.92ms) @ Accel:128 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 23800 (RAR3-p (Compressed)) [Iterations: 262144] + +Speed.#1.........: 31747 H/s (320.33ms) @ Accel:128 Loops:16384 Thr:32 Vec:1 + +* Hash-Mode 23900 (BestCrypt v3 Volume Encryption) [Iterations: 1] + +Speed.#1.........: 1414.2 kH/s (415.30ms) @ Accel:16 Loops:1 Thr:1024 Vec:1 + +* Hash-Mode 24100 (MongoDB ServerKey SCRAM-SHA-1) [Iterations: 9999] + +Speed.#1.........: 269.4 kH/s (239.63ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 24200 (MongoDB ServerKey SCRAM-SHA-256) [Iterations: 14999] + +Speed.#1.........: 76978 H/s (288.79ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24300 (sha1($salt.sha1($pass.$salt))) + +Speed.#1.........: 2382.4 MH/s (279.57ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 631.8 kH/s (244.97ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) [Iterations: 2047] + +Speed.#1.........: 525.5 kH/s (297.25ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) [Iterations: 99999] + +Speed.#1.........: 1261 H/s (265.73ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 24600 (SQLCipher) [Iterations: 63999] + +Speed.#1.........: 20799 H/s (250.38ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 24700 (Stuffit5) + +Speed.#1.........: 6683.0 MH/s (380.83ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 24800 (Umbraco HMAC-SHA1) + +Speed.#1.........: 1369.7 MH/s (243.72ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 24900 (Dahua Authentication MD5) + +Speed.#1.........: 10319.3 MH/s (247.08ms) @ Accel:1024 Loops:512 Thr:128 Vec:1 + +* Hash-Mode 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 110.6 kH/s (175.11ms) @ Accel:128 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 25100 (SNMPv3 HMAC-MD5-96) [Iterations: 1048576] + +Speed.#1.........: 234.5 kH/s (336.32ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 25200 (SNMPv3 HMAC-SHA1-96) [Iterations: 1048576] + +Speed.#1.........: 228.2 kH/s (169.09ms) @ Accel:64 Loops:131072 Thr:128 Vec:1 + +* Hash-Mode 25300 (MS Office 2016 - SheetProtection) [Iterations: 100000] + +Speed.#1.........: 8657 H/s (383.94ms) @ Accel:64 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - user and owner pass) [Iterations: 70] + +Speed.#1.........: 12364.4 kH/s (50.20ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 + +* Hash-Mode 25500 (Stargazer Stellar Wallet XLM) [Iterations: 4095] + +Speed.#1.........: 268.6 kH/s (297.62ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 25600 (bcrypt(md5($pass)) / bcryptmd5) [Iterations: 32] + +Speed.#1.........: 27895 H/s (346.37ms) @ Accel:16 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 25700 (MurmurHash) + +Speed.#1.........: 102.4 GH/s (49.62ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 25800 (bcrypt(sha1($pass)) / bcryptsha1) [Iterations: 32] + +Speed.#1.........: 27910 H/s (346.23ms) @ Accel:16 Loops:32 Thr:16 Vec:1 + +* Hash-Mode 25900 (KNX IP Secure - Device Authentication Code) [Iterations: 65535] + +Speed.#1.........: 17243 H/s (291.21ms) @ Accel:128 Loops:256 Thr:256 Vec:1 + +* Hash-Mode 26000 (Mozilla key3.db) + +Speed.#1.........: 103.2 MH/s (405.41ms) @ Accel:16 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 26100 (Mozilla key4.db) [Iterations: 9999] + +Speed.#1.........: 111.9 kH/s (290.29ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 26200 (OpenEdge Progress Encode) + +Speed.#1.........: 45934.0 kH/s (455.45ms) @ Accel:4 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 26300 (FortiGate256 (FortiOS256)) + +Speed.#1.........: 1990.5 MH/s (334.51ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 1723.7 MH/s (384.14ms) @ Accel:64 Loops:512 Thr:512 Vec:1 + +* Hash-Mode 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 1492.0 MH/s (446.26ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) + +Speed.#1.........: 1231.6 MH/s (271.12ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 26500 (iPhone passcode (UID key + System Keybag)) [Iterations: 50000] + +Speed.#1.........: 18189 H/s (362.71ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 + +* Hash-Mode 26600 (MetaMask Wallet) [Iterations: 9999] + +Speed.#1.........: 111.3 kH/s (288.81ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 26700 (SNMPv3 HMAC-SHA224-128) [Iterations: 1048576] + +Speed.#1.........: 123.0 kH/s (322.60ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 26800 (SNMPv3 HMAC-SHA256-192) [Iterations: 1048576] + +Speed.#1.........: 122.7 kH/s (323.30ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 + +* Hash-Mode 26900 (SNMPv3 HMAC-SHA384-256) [Iterations: 1048576] + +Speed.#1.........: 70961 H/s (270.65ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 + +* Hash-Mode 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) [Iterations: 0] + +Speed.#1.........: 23772.7 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 27100 (NetNTLMv2 (NT)) [Iterations: 0] + +Speed.#1.........: 23552.2 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) + +Speed.#1.........: 5779.5 MH/s (452.65ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 27300 (SNMPv3 HMAC-SHA512-384) [Iterations: 1048576] + +Speed.#1.........: 71169 H/s (269.88ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 + +* Hash-Mode 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) [Iterations: 9999] + +Speed.#1.........: 133.5 kH/s (242.61ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) [Iterations: 259999] + +Speed.#1.........: 3969 H/s (299.39ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) [Iterations: 159999] + +Speed.#1.........: 3064 H/s (301.67ms) @ Accel:32 Loops:512 Thr:256 Vec:1 + +* Hash-Mode 27700 (MultiBit Classic .wallet (scrypt)) [Iterations: 16384] + +Speed.#1.........: 1274 H/s (45.29ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 27800 (MurmurHash3) + +Speed.#1.........: 61025.2 MH/s (83.36ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 27900 (CRC32C) + +Speed.#1.........: 7519.1 MH/s (175.97ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +* Hash-Mode 28000 (CRC64Jones) + +Speed.#1.........: 25391.9 MH/s (200.34ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +* Hash-Mode 28100 (Windows Hello PIN/Password) [Iterations: 9999] + +Speed.#1.........: 111.6 kH/s (290.23ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 + +* Hash-Mode 28200 (Exodus Desktop Wallet (scrypt)) [Iterations: 16384] + +Speed.#1.........: 1265 H/s (45.71ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 28300 (Teamspeak 3 (channel hash)) + +Speed.#1.........: 993.9 MH/s (334.97ms) @ Accel:512 Loops:512 Thr:32 Vec:1 + +* Hash-Mode 28400 (bcrypt(sha512($pass)) / bcryptsha512) [Iterations: 4096] + +Speed.#1.........: 230 H/s (345.78ms) @ Accel:1 Loops:512 Thr:16 Vec:1 + +* Hash-Mode 28600 (PostgreSQL SCRAM-SHA-256) [Iterations: 4095] + +Speed.#1.........: 281.2 kH/s (284.92ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 + +* Hash-Mode 28700 (Amazon AWS4-HMAC-SHA256) + +Speed.#1.........: 60573.1 kH/s (345.38ms) @ Accel:4 Loops:256 Thr:512 Vec:1 + +* Hash-Mode 28800 (Kerberos 5, etype 17, DB) [Iterations: 4095] + +Speed.#1.........: 645.5 kH/s (244.24ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 + +* Hash-Mode 28900 (Kerberos 5, etype 18, DB) [Iterations: 4095] + +Speed.#1.........: 325.6 kH/s (245.35ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 + +* Hash-Mode 99999 (Plaintext) + +Speed.#1.........: 31539.3 MH/s (161.48ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 + +Started: Fri Mar 18 16:33:29 2022 + +Stopped: Fri Mar 18 19:54:40 2022 \ No newline at end of file diff --git a/terraform-selfhost/tools/p2-benchmarks.txt b/tools/benchmarking/p2-benchmarks.txt similarity index 100% rename from terraform-selfhost/tools/p2-benchmarks.txt rename to tools/benchmarking/p2-benchmarks.txt diff --git a/terraform-selfhost/tools/p3-benchmarks.txt b/tools/benchmarking/p3-benchmarks.txt similarity index 100% rename from terraform-selfhost/tools/p3-benchmarks.txt rename to tools/benchmarking/p3-benchmarks.txt diff --git a/tools/benchmarking/p4-benchmarks.txt b/tools/benchmarking/p4-benchmarks.txt new file mode 100644 index 0000000..979223a --- /dev/null +++ b/tools/benchmarking/p4-benchmarks.txt @@ -0,0 +1,130 @@ +hashcat (v6.1.1) starting in benchmark mode... + +CUDA API (CUDA 11.1) +==================== +* Device #1: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #2: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #3: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #4: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #5: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #6: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #7: A100-SXM4-40GB, 40115/40536 MB, 108MCU +* Device #8: A100-SXM4-40GB, 40115/40536 MB, 108MCU + +OpenCL API (OpenCL 1.2 CUDA 11.1.102) - Platform #1 [NVIDIA Corporation] +======================================================================== +* Device #9: A100-SXM4-40GB, skipped +* Device #10: A100-SXM4-40GB, skipped +* Device #11: A100-SXM4-40GB, skipped +* Device #12: A100-SXM4-40GB, skipped +* Device #13: A100-SXM4-40GB, skipped +* Device #14: A100-SXM4-40GB, skipped +* Device #15: A100-SXM4-40GB, skipped +* Device #16: A100-SXM4-40GB, skipped + +Benchmark relevant options: +=========================== +* --optimized-kernel-enable + +Hashmode: 0 - MD5 + +Speed.#1.........: 65855.8 MH/s (54.89ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 100 - SHA1 + +Speed.#1.........: 22057.3 MH/s (82.01ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 1400 - SHA2-256 + +Speed.#1.........: 9558.2 MH/s (94.66ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 + +Hashmode: 1700 - SHA2-512 + +Speed.#1.........: 3128.2 MH/s (72.32ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 22000 - WPA-PBKDF2-PMKID+EAPOL (Iterations: 4095) + +Speed.#1.........: 1079.7 kH/s (51.09ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 1000 - NTLM + +Speed.#1.........: 122.8 GH/s (29.40ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 3000 - LM + +Speed.#1.........: 65756.8 MH/s (54.84ms) @ Accel:512 Loops:1024 Thr:64 Vec:1 + +Hashmode: 5500 - NetNTLMv1 / NetNTLMv1+ESS + +Speed.#1.........: 67076.7 MH/s (53.92ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 5600 - NetNTLMv2 + +Speed.#1.........: 5037.1 MH/s (89.80ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 + +Hashmode: 1500 - descrypt, DES (Unix), Traditional DES + +Speed.#1.........: 2628.4 MH/s (85.93ms) @ Accel:32 Loops:1024 Thr:64 Vec:1 + +Hashmode: 500 - md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) (Iterations: 1000) + +Speed.#1.........: 31933.7 kH/s (53.74ms) @ Accel:16 Loops:1000 Thr:1024 Vec:1 + +Hashmode: 3200 - bcrypt $2*$, Blowfish (Unix) (Iterations: 32) + +Speed.#1.........: 140.0 kH/s (14.95ms) @ Accel:1 Loops:16 Thr:40 Vec:1 + +Hashmode: 1800 - sha512crypt $6$, SHA512 (Unix) (Iterations: 5000) + +Speed.#1.........: 537.0 kH/s (81.83ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 7500 - Kerberos 5, etype 23, AS-REQ Pre-Auth + +Speed.#1.........: 1867.4 MH/s (60.53ms) @ Accel:256 Loops:64 Thr:64 Vec:1 + +Hashmode: 13100 - Kerberos 5, etype 23, TGS-REP + +Speed.#1.........: 1790.9 MH/s (63.15ms) @ Accel:256 Loops:64 Thr:64 Vec:1 + +Hashmode: 15300 - DPAPI masterkey file v1 (Iterations: 23999) + +Speed.#1.........: 185.1 kH/s (50.93ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 + +Hashmode: 15900 - DPAPI masterkey file v2 (Iterations: 12899) + +Speed.#1.........: 110.3 kH/s (79.44ms) @ Accel:8 Loops:128 Thr:1024 Vec:1 + +Hashmode: 7100 - macOS v10.8+ (PBKDF2-SHA512) (Iterations: 1023) + +Speed.#1.........: 1360.9 kH/s (37.50ms) @ Accel:32 Loops:15 Thr:1024 Vec:1 + +Hashmode: 11600 - 7-Zip (Iterations: 16384) + +Speed.#1.........: 1145.6 kH/s (87.17ms) @ Accel:4 Loops:4096 Thr:1024 Vec:1 + +Hashmode: 12500 - RAR3-hp (Iterations: 262144) + +Speed.#1.........: 148.3 kH/s (46.56ms) @ Accel:1 Loops:16384 Thr:1024 Vec:1 + +Hashmode: 13000 - RAR5 (Iterations: 32799) + +Speed.#1.........: 119.3 kH/s (57.02ms) @ Accel:4 Loops:512 Thr:1024 Vec:1 + +Hashmode: 6211 - TrueCrypt RIPEMD160 + XTS 512 bit (Iterations: 1999) + +Speed.#1.........: 840.4 kH/s (59.04ms) @ Accel:8 Loops:128 Thr:1024 Vec:1 + +Hashmode: 13400 - KeePass 1 (AES/Twofish) and KeePass 2 (AES) (Iterations: 24569) + +Speed.#1.........: 140.3 kH/s (262.69ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 + +Hashmode: 6800 - LastPass + LastPass sniffed (Iterations: 499) + +Speed.#1.........: 7622.7 kH/s (45.48ms) @ Accel:16 Loops:124 Thr:1024 Vec:1 + +Hashmode: 11300 - Bitcoin/Litecoin wallet.dat (Iterations: 200459) + +Speed.#1.........: 14535 H/s (77.71ms) @ Accel:2 Loops:1024 Thr:1024 Vec:1 + +Started: Thu Nov 12 05:29:27 2020 +Stopped: Thu Nov 12 05:34:50 2020 \ No newline at end of file diff --git a/terraform-selfhost/tools/read_benchmark.php b/tools/benchmarking/read_benchmark.php similarity index 66% rename from terraform-selfhost/tools/read_benchmark.php rename to tools/benchmarking/read_benchmark.php index 4f3f861..22783ab 100644 --- a/terraform-selfhost/tools/read_benchmark.php +++ b/tools/benchmarking/read_benchmark.php @@ -5,20 +5,23 @@ exit(); } -$benchmark = explode("Hashmode: ", file_get_contents($argv[1])); +//$benchmark = explode("Hashmode: ", file_get_contents($argv[1])); +$benchmark = explode("Hash-Mode ", file_get_contents($argv[1])); $speeds = array(); array_shift($benchmark); while (count($benchmark) > 0) { $entry = array_shift($benchmark); - $entry = explode(" - ", $entry); + // $entry = explode(" - ", $entry); + $entry = explode(" ", $entry); + //array_shift($entry); $id = array_shift($entry); - echo $id . "\n"; - $entry = explode("\n", implode(" - ", $entry)); + echo "id: " . $id . "\n"; + $entry = explode("\n", implode(" ", $entry)); - $name = array_shift($entry); - echo $name . "\n"; + $name = substr(array_shift($entry), 1, -1); + echo "name: " . $name . "\n"; array_shift($entry); $speed = array(); @@ -26,6 +29,8 @@ echo $line; preg_match("/\:\s*?([\d\.]+)\s(.{0,1}H\/s)\s/", $line, $matches); + print_r($matches); + if (count($matches) > 0) { $hashes = $matches[1]; switch($matches[2]) { @@ -53,6 +58,10 @@ } } + if (count($speed) == 0) { + continue; + } + $speed = array_sum($speed) / count($speed); $speeds[$id] = $speed; diff --git a/tools/benchmarking/w-g3-benchmarks.txt b/tools/benchmarking/w-g3-benchmarks.txt new file mode 100644 index 0000000..9a0f447 --- /dev/null +++ b/tools/benchmarking/w-g3-benchmarks.txt @@ -0,0 +1,688 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 3082.7 MH/s (344.79ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 2528.9 MH/s (210.98ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 2061.3 MH/s (259.02ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 3315.2 MH/s (320.96ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 28732 H/s (456.00ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 2630.7 MH/s (203.47ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 1358.1 MH/s (196.51ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 2340.1 kH/s (259.69ms) @ Accel:1024 Loops:511 Thr:128 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 180.0 MH/s (372.19ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 208.6 MH/s (316.09ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 1870.3 MH/s (72.16ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 6285.7 kH/s (50.89ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 1002.8 MH/s (266.46ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 20148 H/s (405.85ms) @ Accel:16 Loops:4 Thr:512 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 392.1 MH/s (341.62ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 343.7 MH/s (389.08ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 348.0 MH/s (384.27ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 338.0 MH/s (395.64ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 346.2 MH/s (386.31ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 385.5 MH/s (346.94ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 580.7 kH/s (426.70ms) @ Accel:16 Loops:999 Thr:1024 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 1747.6 MH/s (305.05ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 2462.8 MH/s (432.35ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 2013.4 MH/s (264.95ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 1761.1 MH/s (303.14ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 858.3 MH/s (311.58ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 2927 H/s (288.85ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 458.5 MH/s (582.82ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 869.5 MH/s (305.81ms) @ Accel:8192 Loops:64 Thr:32 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 3303 H/s (618.96ms) @ Accel:128 Loops:4096 Thr:128 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 24902.3 kH/s (336.55ms) @ Accel:8 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 7921.3 kH/s (264.48ms) @ Accel:16 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 10667.0 kH/s (393.18ms) @ Accel:16 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 24939.3 kH/s (336.11ms) @ Accel:8 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 6973.7 kH/s (300.45ms) @ Accel:16 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 9042.0 kH/s (463.63ms) @ Accel:16 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 3123.5 kH/s (265.54ms) @ Accel:64 Loops:999 Thr:1024 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 1831.3 MH/s (291.39ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 1542.7 kH/s (304.20ms) @ Accel:64 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 223.4 kH/s (254.88ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 7079 H/s (288.88ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 55036 H/s (295.38ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 1756.7 kH/s (267.68ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 13849 H/s (589.70ms) @ Accel:32 Loops:16384 Thr:256 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 725.1 MH/s (368.35ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 13636.8 kH/s (23.38ms) @ Accel:1024 Loops:9 Thr:128 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 4022.8 kH/s (341.49ms) @ Accel:128 Loops:99 Thr:1024 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 147.5 kH/s (437.34ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 1609.9 MH/s (331.45ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 1088.6 MH/s (490.74ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 18658 H/s (428.13ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 154.4 MH/s (434.19ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 57814 H/s (451.62ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 1995.6 MH/s (266.48ms) @ Accel:2048 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 68806 H/s (315.60ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 1008.4 MH/s (265.34ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 1514.5 kH/s (304.71ms) @ Accel:64 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 455 H/s (219.24ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 261 H/s (191.17ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 183 H/s (136.50ms) @ Accel:64 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 439 H/s (149.14ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 214 H/s (152.67ms) @ Accel:64 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 143 H/s (229.07ms) @ Accel:64 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 41 H/s (200.22ms) @ Accel:64 Loops:500 Thr:256 Vec:1 +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 20 H/s (200.33ms) @ Accel:64 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 14 H/s (150.33ms) @ Accel:64 Loops:500 Thr:64 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 910 H/s (224.63ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 521 H/s (196.32ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 365 H/s (139.99ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 609 H/s (214.83ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 306 H/s (213.98ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 204 H/s (160.24ms) @ Accel:64 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 1522 H/s (220.14ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 764 H/s (219.44ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 510 H/s (164.41ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 269.6 MH/s (496.41ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 778.4 MH/s (342.71ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 1821.1 MH/s (292.98ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 1086.4 MH/s (245.83ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 1121.5 MH/s (238.45ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 1003.3 MH/s (266.36ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 139.8 MH/s (7.53ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 1006.3 MH/s (265.65ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 944.9 MH/s (282.87ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 1003.2 MH/s (266.46ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 156.7 MH/s (213.84ms) @ Accel:128 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 251.6 MH/s (266.38ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 68639.7 kH/s (244.14ms) @ Accel:256 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 465.8 MH/s (288.16ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 1075.9 MH/s (248.79ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 85123 H/s (307.41ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 57 H/s (462.38ms) @ Accel:256 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 2262.8 MH/s (173.30ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 546.1 MH/s (245.57ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 76149.0 kH/s (440.00ms) @ Accel:512 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 387.6 MH/s (345.01ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 115.1 kH/s (301.40ms) @ Accel:128 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 168.7 kH/s (306.53ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#1.........: 35542 H/s (311.56ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 68385.6 kH/s (1.36ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 1631.8 MH/s (327.03ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 2338 H/s (437.05ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 0 H/s (3.94ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 27907 H/s (291.93ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 1124.6 MH/s (237.47ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 3547.4 kH/s (474.09ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 76195.8 kH/s (439.61ms) @ Accel:512 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 2533.7 MH/s (210.64ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 30593 H/s (428.00ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 294.9 kH/s (426.51ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 3146.3 MH/s (337.98ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 147.1 MH/s (456.38ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 90230.7 kH/s (370.59ms) @ Accel:512 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 28681 H/s (455.93ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 60988 H/s (427.93ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 1997.4 MH/s (267.39ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 395.2 MH/s (339.04ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 351.0 MH/s (381.19ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 351.2 MH/s (381.02ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 226.2 MH/s (411.14ms) @ Accel:704 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 153.9 MH/s (435.37ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 243.9 MH/s (550.48ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 263.5 MH/s (508.06ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 435.4 MH/s (615.38ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 341.6 MH/s (391.60ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 427.7 MH/s (313.03ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 351.5 MH/s (380.55ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 434.9 MH/s (307.66ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 97098.4 kH/s (344.98ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 418.0 MH/s (320.16ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 204.2 MH/s (328.22ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 434.7 MH/s (308.31ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 391.3 MH/s (342.34ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 424.9 MH/s (315.28ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 433.1 MH/s (309.42ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 418.4 MH/s (319.93ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 69189 H/s (370.35ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 436.8 MH/s (306.44ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 306.8 MH/s (435.76ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 152.5 MH/s (439.90ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 30577 H/s (427.96ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 8576 H/s (311.88ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 471.5 MH/s (566.78ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 361.2 kH/s (206.94ms) @ Accel:128 Loops:511 Thr:512 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 755.9 MH/s (352.68ms) @ Accel:512 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 123.2 kH/s (422.71ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 85015 H/s (307.62ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 3228.9 kH/s (521.99ms) @ Accel:1024 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 1164.1 kH/s (1653.75ms) @ Accel:1024 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 480.6 kH/s (2092.82ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 118.6 MH/s (282.52ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 18104.7 kH/s (460.22ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 408.5 kH/s (310.50ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 205.3 kH/s (312.97ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 408.7 kH/s (310.71ms) @ Accel:128 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 205.3 kH/s (313.42ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 2598.4 MH/s (206.17ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 1501.1 MH/s (176.93ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 4370.1 MH/s (0.01ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 208.0 kH/s (273.55ms) @ Accel:128 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 98076 H/s (284.12ms) @ Accel:64 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 65071 H/s (425.54ms) @ Accel:64 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 9037 H/s (294.51ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 19806 H/s (458.58ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 13136 H/s (310.01ms) @ Accel:128 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 681.2 MH/s (400.13ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 499.7 MH/s (535.36ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 1145.3 kH/s (378.94ms) @ Accel:256 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 185.3 MH/s (180.64ms) @ Accel:512 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 173.8 MH/s (388.31ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 966.4 MH/s (276.39ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 982.1 MH/s (272.05ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 166.6 kH/s (309.93ms) @ Accel:128 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 196.9 MH/s (339.98ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 1353.6 MH/s (197.16ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 1559.0 MH/s (342.33ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 486.7 MH/s (549.18ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 564.7 MH/s (473.06ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 32143 H/s (224.92ms) @ Accel:8 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 32174 H/s (224.76ms) @ Accel:8 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 222.8 kH/s (256.86ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 78159 H/s (277.73ms) @ Accel:128 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 69791 H/s (283.45ms) @ Accel:512 Loops:255 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 208.6 kH/s (308.20ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 76116 H/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 695 H/s (367.78ms) @ Accel:64 Loops:4096 Thr:1024 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 368.5 MH/s (363.17ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 942.0 MH/s (283.69ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 76674 H/s (841.30ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 218.3 MH/s (307.13ms) @ Accel:512 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 60230 H/s (269.56ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 349 H/s (71.96ms) @ Accel:16 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 92334.6 kH/s (363.22ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 261.2 MH/s (512.13ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 169.7 MH/s (396.80ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 112.2 MH/s (298.65ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 104.2 MH/s (321.49ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 251.5 MH/s (266.26ms) @ Accel:512 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 177.2 MH/s (377.78ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 112.0 MH/s (299.39ms) @ Accel:512 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 804.2 kH/s (274.21ms) @ Accel:256 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 408.3 kH/s (311.17ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 418.3 kH/s (303.94ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 6073 H/s (441.04ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 25436 H/s (228.56ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 13414 H/s (430.06ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 13851 H/s (589.69ms) @ Accel:32 Loops:16384 Thr:256 Vec:1 +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 13347 H/s (590.17ms) @ Accel:32 Loops:16384 Thr:256 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 466.7 kH/s (535.78ms) @ Accel:512 Loops:1 Thr:32 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 2968.0 MH/s (358.57ms) @ Accel:8192 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 2427.1 MH/s (438.94ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 170.1 kH/s (304.39ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 40706 H/s (427.42ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 976.6 MH/s (273.39ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 405.1 kH/s (312.97ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 275.1 kH/s (465.50ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 733 H/s (457.51ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 13448 H/s (310.84ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 2183.6 MH/s (244.49ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 562.1 MH/s (473.59ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 2448.4 MH/s (435.08ms) @ Accel:8192 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 24098 H/s (337.07ms) @ Accel:8 Loops:131072 Thr:512 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 42184 H/s (771.26ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 40962 H/s (794.75ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 4629 H/s (289.50ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 6341.3 kH/s (50.88ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 138.9 kH/s (465.74ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 10797 H/s (277.52ms) @ Accel:16 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 791.2 MH/s (336.52ms) @ Accel:512 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 10800 H/s (277.27ms) @ Accel:16 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 9357 H/s (436.79ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 1975.7 MH/s (270.35ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 21225.8 kH/s (395.07ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 57242 H/s (456.23ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 22132.4 kH/s (378.58ms) @ Accel:128 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 424.4 MH/s (636.85ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 988.6 MH/s (270.73ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 873.1 MH/s (306.46ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 710.0 MH/s (376.98ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 11592 H/s (462.23ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 40906 H/s (397.16ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 40956 H/s (396.74ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 37108 H/s (435.18ms) @ Accel:8 Loops:262144 Thr:512 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 1512.0 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 1604.8 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 1846.7 MH/s (289.08ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 36974 H/s (435.96ms) @ Accel:8 Loops:262144 Thr:512 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 85401 H/s (305.15ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 2053 H/s (466.01ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 1617 H/s (453.29ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 2288.6 MH/s (233.16ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 1257.4 MH/s (425.02ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 479.7 MH/s (558.94ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 165.4 MH/s (405.17ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 10797 H/s (277.50ms) @ Accel:256 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 1447.7 MH/s (184.35ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 1706.7 MH/s (312.82ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 2284.6 MH/s (233.62ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 1541.7 MH/s (346.46ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 2593.6 MH/s (206.55ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 3123.9 kH/s (274.54ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 1673.8 MH/s (318.70ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 1499.3 MH/s (355.97ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 1968.7 MH/s (271.28ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 1500.1 MH/s (356.18ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 1235.0 MH/s (432.66ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 1087.6 MH/s (245.54ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 768.7 MH/s (347.14ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 1619.0 MH/s (330.09ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 1401.6 MH/s (190.30ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 2523.0 MH/s (212.05ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 1693.0 MH/s (315.35ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 1359.8 MH/s (196.34ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 3538.2 kH/s (475.25ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 1042.7 MH/s (256.22ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 3544.2 kH/s (475.26ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 2860.4 MH/s (372.29ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 581.8 kH/s (351.34ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 432.9 MH/s (309.14ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 168.9 MH/s (396.43ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 3184.5 MH/s (334.26ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 535.5 MH/s (250.09ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 1084.2 MH/s (246.29ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 2504.1 kH/s (358.91ms) @ Accel:128 Loops:1023 Thr:512 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 2105.9 MH/s (253.47ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 820.3 MH/s (325.89ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 1595.0 MH/s (334.96ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 156.1 MH/s (429.09ms) @ Accel:256 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 137.0 kH/s (450.50ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 76317 H/s (394.63ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 52931 H/s (280.59ms) @ Accel:8 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 207.9 kH/s (257.25ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 97924 H/s (284.13ms) @ Accel:64 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 64715 H/s (398.51ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 20176 H/s (362.15ms) @ Accel:16 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 10089 H/s (356.14ms) @ Accel:8 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 6718 H/s (286.05ms) @ Accel:8 Loops:62 Thr:256 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 259.2 kH/s (407.12ms) @ Accel:64 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 140.9 kH/s (350.71ms) @ Accel:32 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 96691 H/s (249.87ms) @ Accel:16 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 3545.7 kH/s (474.77ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 5772.8 kH/s (465.51ms) @ Accel:256 Loops:63 Thr:1024 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 2669.0 kH/s (290.52ms) @ Accel:128 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 1547.6 kH/s (205.49ms) @ Accel:128 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 10536.0 kH/s (78.57ms) @ Accel:256 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 1106.0 kH/s (426.38ms) @ Accel:32 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 120.2 MH/s (278.60ms) @ Accel:128 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 2885.6 MH/s (368.20ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 1834.4 MH/s (291.06ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 22828 H/s (290.81ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 453.8 MH/s (295.40ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 103.7 kH/s (497.96ms) @ Accel:256 Loops:64 Thr:1024 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 151.8 MH/s (441.75ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 985.1 MH/s (125.22ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 1058.2 MH/s (101.59ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 332.7 MH/s (401.42ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 328.6 MH/s (406.30ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 27627 H/s (295.54ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 183.1 MH/s (366.04ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 2053.5 MH/s (260.03ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 5664 H/s (294.92ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 738.0 MH/s (361.40ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 445.9 MH/s (300.57ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 412.6 MH/s (326.10ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 58055.3 kH/s (288.61ms) @ Accel:256 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 33934.3 kH/s (493.90ms) @ Accel:8 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 413.4 kH/s (306.12ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 57841 H/s (4.45ms) @ Accel:16 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 3499.5 MH/s (303.95ms) @ Accel:1024 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 229.4 kH/s (266.97ms) @ Accel:512 Loops:1000 Thr:12 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 333.6 kH/s (303.53ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 28698 H/s (455.77ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 3552 H/s (4.56ms) @ Accel:16 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 70126 H/s (302.84ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 34985 H/s (303.52ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 4579 H/s (292.40ms) @ Accel:256 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 87837.9 kH/s (381.39ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 191.1 MH/s (345.14ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 387.6 MH/s (345.36ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 105.8 MH/s (316.42ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 185.5 MH/s (355.53ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 876.4 MH/s (152.53ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 2272.6 MH/s (234.96ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 3489.9 MH/s (304.80ms) @ Accel:1024 Loops:256 Thr:256 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-g4ad-benchmarks.txt b/tools/benchmarking/w-g4ad-benchmarks.txt new file mode 100644 index 0000000..9a3e0f3 --- /dev/null +++ b/tools/benchmarking/w-g4ad-benchmarks.txt @@ -0,0 +1,1224 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 5493.7 MH/s (110.72ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 5549.6 MH/s (109.47ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 11043.3 MH/s +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 1416.7 MH/s (425.27ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 4521.0 MH/s (134.05ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 5937.7 MH/s +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 3859.9 MH/s (155.76ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3964.2 MH/s (151.47ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7824.2 MH/s +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 60565 H/s (247.99ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 62883 H/s (234.83ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 123.4 kH/s +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 2003.3 MH/s (301.44ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1858.6 MH/s (326.71ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3861.9 MH/s +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 2239.2 MH/s (268.94ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2240.0 MH/s (268.72ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 4479.2 MH/s +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 3690.2 kH/s (305.22ms) @ Accel:2048 Loops:1023 Thr:32 Vec:1 +Speed.#2.........: 4505.5 kH/s (247.00ms) @ Accel:2048 Loops:1023 Thr:32 Vec:1 +Speed.#*.........: 8195.7 kH/s +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 358.9 MH/s (419.86ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 364.3 MH/s (413.60ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 723.2 MH/s +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 397.8 MH/s (81.95ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 399.5 MH/s (81.18ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 797.3 MH/s +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 3412.1 MH/s (42.43ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3382.1 MH/s (42.88ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 6794.2 MH/s +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 15191.3 kH/s (30.42ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Speed.#2.........: 15261.4 kH/s (30.27ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Speed.#*.........: 30452.7 kH/s +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 1192.5 MH/s (505.28ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2139.9 MH/s (281.34ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3332.4 MH/s +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 717.3 MH/s (420.19ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 811.1 MH/s (371.57ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1528.4 MH/s +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 570.2 MH/s (529.02ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 788.9 MH/s (381.88ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1359.2 MH/s +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 711.8 MH/s (423.40ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 801.3 MH/s (376.13ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1513.0 MH/s +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 1077.1 kH/s (206.34ms) @ Accel:2048 Loops:249 Thr:32 Vec:1 +Speed.#2.........: 1146.0 kH/s (189.50ms) @ Accel:2048 Loops:249 Thr:32 Vec:1 +Speed.#*.........: 2223.1 kH/s +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 2040.9 MH/s (295.13ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 3520.7 MH/s (170.68ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 5561.6 MH/s +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 3796.5 MH/s (158.25ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3861.4 MH/s (155.54ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7657.9 MH/s +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 2090.2 MH/s (288.26ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3164.4 MH/s (189.89ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 5254.6 MH/s +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 1708.3 MH/s (352.63ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1755.6 MH/s (343.09ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3464.0 MH/s +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 4811 H/s (351.07ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 5343 H/s (315.99ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 10154 H/s +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 855.0 MH/s (357.72ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 838.4 MH/s (370.39ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1693.4 MH/s +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 4669.0 MH/s (131.34ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 5492.4 MH/s (112.55ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 10161.4 MH/s +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 262 H/s (548.02ms) @ Accel:32 Loops:4096 Thr:32 Vec:1 +Speed.#2.........: 246 H/s (583.00ms) @ Accel:32 Loops:4096 Thr:32 Vec:1 +Speed.#*.........: 508 H/s +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 49166.0 kH/s (384.02ms) @ Accel:512 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 45273.4 kH/s (414.67ms) @ Accel:512 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 94439.5 kH/s +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 15038.3 kH/s (313.15ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 14309.8 kH/s (329.14ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 29348.1 kH/s +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 19589.3 kH/s (240.28ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 20398.1 kH/s (230.72ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 39987.4 kH/s +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 45106.8 kH/s (417.94ms) @ Accel:1024 Loops:32 Thr:32 Vec:1 +Speed.#2.........: 44830.6 kH/s (420.39ms) @ Accel:1024 Loops:32 Thr:32 Vec:1 +Speed.#*.........: 89937.3 kH/s +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 13294.4 kH/s (354.29ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 12838.4 kH/s (366.91ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 26132.9 kH/s +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 16257.4 kH/s (289.71ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 14587.2 kH/s (322.84ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 30844.6 kH/s +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 4504.0 kH/s (201.31ms) @ Accel:1024 Loops:999 Thr:64 Vec:1 +Speed.#2.........: 4520.8 kH/s (200.75ms) @ Accel:1024 Loops:999 Thr:64 Vec:1 +Speed.#*.........: 9024.8 kH/s +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 3675.1 MH/s (163.52ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3786.8 MH/s (158.61ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7461.9 MH/s +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 2605.9 kH/s (384.78ms) @ Accel:2048 Loops:999 Thr:32 Vec:1 +Speed.#2.........: 2725.7 kH/s (367.39ms) @ Accel:2048 Loops:999 Thr:32 Vec:1 +Speed.#*.........: 5331.6 kH/s +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 359.9 kH/s (354.04ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 388.4 kH/s (328.10ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 748.3 kH/s +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 11666 H/s (393.54ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 12945 H/s (354.45ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 24611 H/s +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 91139 H/s (396.00ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 98765 H/s (369.48ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 189.9 kH/s +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 3198.9 kH/s (155.01ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 +Speed.#2.........: 3177.7 kH/s (156.25ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 +Speed.#*.........: 6376.6 kH/s +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 26219 H/s (691.39ms) @ Accel:512 Loops:16384 Thr:32 Vec:1 +Speed.#2.........: 26434 H/s (693.47ms) @ Accel:512 Loops:16384 Thr:32 Vec:1 +Speed.#*.........: 52653 H/s +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 1559.5 MH/s (386.26ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 1602.9 MH/s (375.92ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 3162.4 MH/s +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 14314.4 kH/s (23.29ms) @ Accel:512 Loops:9 Thr:128 Vec:1 +Speed.#2.........: 14622.2 kH/s (23.23ms) @ Accel:512 Loops:9 Thr:128 Vec:1 +Speed.#*.........: 28936.6 kH/s +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 7156.8 kH/s (96.14ms) @ Accel:1024 Loops:99 Thr:64 Vec:1 +Speed.#2.........: 7346.6 kH/s (88.79ms) @ Accel:1024 Loops:99 Thr:64 Vec:1 +Speed.#*.........: 14503.4 kH/s +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 292.0 kH/s (247.47ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 314.6 kH/s (227.57ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 606.6 kH/s +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 2245.1 MH/s (268.18ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2282.7 MH/s (263.62ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4527.8 MH/s +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 37010 H/s (247.53ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 39953 H/s (227.65ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 76963 H/s +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#2.........: 302.1 MH/s (249.32ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 302.1 MH/s +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 105.1 kH/s (281.49ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 102.2 kH/s (289.27ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 207.3 kH/s +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 3758.7 MH/s (159.82ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3824.9 MH/s (157.05ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7583.7 MH/s +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 124.4 kH/s (392.85ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 127.4 kH/s (383.72ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 251.8 kH/s +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 2326.6 kH/s (385.88ms) @ Accel:256 Loops:999 Thr:256 Vec:1 +Speed.#2.........: 2359.0 kH/s (368.60ms) @ Accel:256 Loops:999 Thr:256 Vec:1 +Speed.#*.........: 4685.6 kH/s +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 741 H/s (134.43ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 743 H/s (134.19ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 1484 H/s +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 422 H/s (117.98ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 423 H/s (117.73ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 846 H/s +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 296 H/s (168.39ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 297 H/s (168.08ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 593 H/s +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 753 H/s (173.69ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 807 H/s (162.04ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 1560 H/s +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 374 H/s (174.62ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 401 H/s (162.86ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 776 H/s +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 250 H/s (130.55ms) @ Accel:1024 Loops:250 Thr:128 Vec:1 +Speed.#2.........: 268 H/s (121.72ms) @ Accel:1024 Loops:250 Thr:128 Vec:1 +Speed.#*.........: 518 H/s +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 3 H/s (155.75ms) @ Accel:64 Loops:250 Thr:32 Vec:1 +Speed.#2.........: 3 H/s (157.52ms) @ Accel:64 Loops:250 Thr:32 Vec:1 +Speed.#*.........: 6 H/s +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 1 H/s (168.85ms) @ Accel:16 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 2 H/s (123.16ms) @ Accel:16 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 4 H/s +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 1 H/s (126.76ms) @ Accel:8 Loops:250 Thr:64 Vec:1 +Speed.#2.........: 1 H/s (137.99ms) @ Accel:8 Loops:250 Thr:64 Vec:1 +Speed.#*.........: 2 H/s +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 1483 H/s (137.79ms) @ Accel:8192 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 1485 H/s (137.52ms) @ Accel:8192 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 2968 H/s +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 850 H/s (120.09ms) @ Accel:4096 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 852 H/s (119.87ms) @ Accel:4096 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1702 H/s +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 596 H/s (171.33ms) @ Accel:8192 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 597 H/s (171.05ms) @ Accel:8192 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1194 H/s +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 1204 H/s (217.26ms) @ Accel:8192 Loops:1000 Thr:32 Vec:1 +Speed.#2.........: 1258 H/s (207.99ms) @ Accel:8192 Loops:1000 Thr:32 Vec:1 +Speed.#*.........: 2462 H/s +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 604 H/s (216.59ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 631 H/s (207.35ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 1235 H/s +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 402 H/s (162.67ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#2.........: 420 H/s (155.77ms) @ Accel:4096 Loops:500 Thr:32 Vec:1 +Speed.#*.........: 822 H/s +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 3011 H/s (222.45ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 3144 H/s (213.03ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 6156 H/s +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 1513 H/s (221.38ms) @ Accel:8192 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 1580 H/s (211.99ms) @ Accel:8192 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 3093 H/s +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 1009 H/s (165.80ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 1054 H/s (158.76ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 2064 H/s +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 1667.1 MH/s (361.33ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1684.1 MH/s (357.79ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3351.2 MH/s +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 2282.2 MH/s (263.82ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2315.7 MH/s (259.99ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 4597.9 MH/s +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 2517.7 MH/s (118.52ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2525.6 MH/s (118.07ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 5043.2 MH/s +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 1195.1 MH/s (504.18ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2142.7 MH/s (280.95ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3337.8 MH/s +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 167.9 MH/s (2.41ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 218.5 MH/s (2.43ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 386.4 MH/s +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 2178.3 MH/s (276.37ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2257.6 MH/s (266.65ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4436.0 MH/s +Hash.Mode........: 14400 (sha1(CX)) +Speed.#2.........: 356.1 MH/s (423.17ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 356.1 MH/s +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 563.2 MH/s (267.38ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 598.0 MH/s (251.76ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 1161.2 MH/s +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 384.9 MH/s (395.01ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 394.1 MH/s (386.03ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 779.0 MH/s +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 1084.0 MH/s (277.78ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1195.8 MH/s (251.80ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 2279.8 MH/s +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 150.6 kH/s (386.88ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 158.4 kH/s (369.89ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 308.9 kH/s +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 121 H/s (219.90ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 127 H/s (210.50ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 248 H/s +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 3525.1 MH/s (55.06ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3911.5 MH/s (36.54ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7436.5 MH/s +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 1388.5 MH/s (433.89ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1448.7 MH/s (415.82ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 2837.1 MH/s +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#2.........: 137.9 MH/s (272.99ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 137.9 MH/s +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 563.2 MH/s (535.42ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 756.2 MH/s (398.48ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1319.5 MH/s +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 201.0 kH/s (385.75ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 212.0 kH/s (368.61ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 413.0 kH/s +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 301.6 kH/s (385.78ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 315.6 kH/s (367.30ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 617.2 kH/s +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#2.........: 66481 H/s (375.13ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 66481 H/s +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 45134.6 kH/s (0.67ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 71438.1 kH/s (0.68ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 116.6 MH/s +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 4623 H/s (247.95ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 4997 H/s (227.71ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 9621 H/s +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 1 H/s (1.95ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Speed.#2.........: 1 H/s (1.94ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Speed.#*.........: 1 H/s +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 46817 H/s (397.08ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 50619 H/s (370.55ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 97437 H/s +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 2374.7 MH/s (253.35ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2443.2 MH/s (246.37ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4818.0 MH/s +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 6811.9 kH/s (323.05ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#2.........: 7157.6 kH/s (306.48ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#*.........: 13969.5 kH/s +Hash.Mode........: 16000 (Tripcode) +Speed.#2.........: 137.7 MH/s (273.44ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 137.7 MH/s +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 4284.5 MH/s (141.06ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 4537.7 MH/s (133.81ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 8822.2 MH/s +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 60769 H/s (247.24ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 66076 H/s (224.62ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 126.8 kH/s +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 586.8 kH/s (241.74ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 630.8 kH/s (222.66ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1217.6 kH/s +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 5687.1 MH/s (106.07ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 5627.3 MH/s (107.31ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 11314.4 MH/s +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 450.2 MH/s (336.21ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 436.1 MH/s (348.59ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 886.3 MH/s +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 443.1 MH/s (339.65ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 322.5 MH/s (467.50ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 765.6 MH/s +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 60717 H/s (244.50ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 63432 H/s (234.06ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 124.1 kH/s +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 120.3 kH/s (243.01ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 130.1 kH/s (223.88ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 250.4 kH/s +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 718.2 MH/s (419.66ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 819.7 MH/s (367.65ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1537.9 MH/s +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 589.3 MH/s (511.46ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 746.3 MH/s (403.77ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1335.6 MH/s +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 712.0 MH/s (423.19ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 810.7 MH/s (371.62ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1522.7 MH/s +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#*.........: 0 H/s +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 292.6 MH/s (513.81ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 290.8 MH/s (517.09ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 583.3 MH/s +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#*.........: 0 H/s +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#*.........: 0 H/s +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 712.2 MH/s (422.75ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 663.0 MH/s (453.75ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1375.2 MH/s +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 489.6 MH/s (307.63ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 490.5 MH/s (307.01ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 980.1 MH/s +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 489.5 MH/s (307.71ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 490.7 MH/s (306.89ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 980.2 MH/s +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 181.0 MH/s (416.19ms) @ Accel:512 Loops:64 Thr:128 Vec:1 +Speed.#2.........: 183.2 MH/s (411.30ms) @ Accel:512 Loops:64 Thr:128 Vec:1 +Speed.#*.........: 364.2 MH/s +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 489.9 MH/s (307.48ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 491.0 MH/s (306.69ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 980.9 MH/s +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 358.0 MH/s (420.95ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Speed.#2.........: 391.1 MH/s (385.31ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Speed.#*.........: 749.1 MH/s +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 489.7 MH/s (307.55ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 490.5 MH/s (307.03ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 980.3 MH/s +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 489.9 MH/s (307.50ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 490.8 MH/s (306.86ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 980.6 MH/s +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 489.8 MH/s (307.54ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 491.0 MH/s (306.74ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 980.8 MH/s +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 490.2 MH/s (307.37ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 491.3 MH/s (306.51ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 981.5 MH/s +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 145.9 kH/s (355.35ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 155.9 kH/s (332.30ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 301.8 kH/s +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 490.0 MH/s (307.45ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 490.6 MH/s (306.99ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 980.6 MH/s +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#2.........: 799.3 MH/s (386.30ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 799.3 MH/s +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#2.........: 298.6 MH/s (252.24ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 298.6 MH/s +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 60688 H/s (244.64ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 66081 H/s (224.76ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 126.8 kH/s +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 15291 H/s (393.31ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 16000 H/s (375.87ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 31291 H/s +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 858.8 MH/s (357.72ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 839.2 MH/s (368.89ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1697.9 MH/s +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 786.1 kH/s (392.85ms) @ Accel:1024 Loops:1023 Thr:64 Vec:1 +Speed.#2.........: 794.7 kH/s (375.29ms) @ Accel:1024 Loops:1023 Thr:64 Vec:1 +Speed.#*.........: 1580.8 kH/s +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 3546.3 MH/s (169.32ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3305.9 MH/s (181.69ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 6852.2 MH/s +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 243.2 kH/s (240.48ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 +Speed.#2.........: 264.9 kH/s (220.94ms) @ Accel:1024 Loops:512 Thr:64 Vec:1 +Speed.#*.........: 508.1 kH/s +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 152.1 kH/s (386.14ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 159.1 kH/s (369.35ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 311.2 kH/s +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 4609.5 kH/s (213.24ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Speed.#2.........: 4186.2 kH/s (238.98ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Speed.#*.........: 8795.8 kH/s +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 2288.3 kH/s (466.80ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 +Speed.#2.........: 2303.0 kH/s (463.49ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 +Speed.#*.........: 4591.3 kH/s +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 914.7 kH/s (591.36ms) @ Accel:128 Loops:1000 Thr:256 Vec:1 +Speed.#2.........: 1319.1 kH/s (398.19ms) @ Accel:128 Loops:1000 Thr:256 Vec:1 +Speed.#*.........: 2233.8 kH/s +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 422.7 MH/s (359.41ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 486.9 MH/s (314.66ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 909.6 MH/s +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#2.........: 87850.9 kH/s (427.82ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 87850.9 kH/s +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 719.5 kH/s (393.54ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 751.9 kH/s (375.75ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 1471.4 kH/s +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 365.2 kH/s (393.54ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 382.1 kH/s (375.96ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 747.3 kH/s +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 720.4 kH/s (393.32ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 +Speed.#2.........: 752.5 kH/s (375.72ms) @ Accel:1024 Loops:1024 Thr:64 Vec:1 +Speed.#*.........: 1472.8 kH/s +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 365.5 kH/s (393.34ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 382.3 kH/s (375.82ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 747.8 kH/s +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 4933.9 MH/s (123.21ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 5094.9 MH/s (118.77ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 10028.8 MH/s +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 5754.2 MH/s (106.03ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 5311.9 MH/s (115.17ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 11066.1 MH/s +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 4196.2 MH/s (0.00ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Speed.#2.........: 4603.0 MH/s (0.00ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Speed.#*.........: 8799.3 MH/s +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 357.7 kH/s (349.41ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 388.6 kH/s (328.79ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 746.3 kH/s +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 179.4 kH/s (345.97ms) @ Accel:256 Loops:124 Thr:128 Vec:1 +Speed.#2.........: 195.6 kH/s (325.61ms) @ Accel:256 Loops:124 Thr:128 Vec:1 +Speed.#*.........: 375.0 kH/s +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 118.6 kH/s (278.39ms) @ Accel:256 Loops:62 Thr:128 Vec:1 +Speed.#2.........: 127.8 kH/s (257.82ms) @ Accel:256 Loops:62 Thr:128 Vec:1 +Speed.#*.........: 246.3 kH/s +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 15027 H/s (395.92ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 16257 H/s (369.50ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 31284 H/s +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 41877 H/s (247.47ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 43472 H/s (237.05ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 85349 H/s +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 23207 H/s (394.20ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#2.........: 24397 H/s (376.49ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#*.........: 47604 H/s +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 806.3 MH/s (385.47ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 833.7 MH/s (368.32ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1640.1 MH/s +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 702.3 MH/s (426.75ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 662.8 MH/s (453.65ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1365.1 MH/s +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 2298.7 kH/s (162.84ms) @ Accel:256 Loops:499 Thr:256 Vec:1 +Speed.#2.........: 2490.5 kH/s (149.96ms) @ Accel:256 Loops:499 Thr:256 Vec:1 +Speed.#*.........: 4789.2 kH/s +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 728.7 MH/s (413.48ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 664.9 MH/s (453.58ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 1393.6 MH/s +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 579.2 MH/s (520.09ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 607.2 MH/s (494.23ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1186.3 MH/s +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 1891.7 MH/s (318.67ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 1952.2 MH/s (308.47ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 3844.0 MH/s +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 1807.9 MH/s (333.12ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1797.2 MH/s (335.16ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3605.1 MH/s +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 296.3 kH/s (392.99ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#2.........: 310.0 kH/s (375.38ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#*.........: 606.3 kH/s +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 371.7 MH/s (405.37ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 414.8 MH/s (363.15ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 786.5 MH/s +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 1096.4 MH/s (549.12ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2645.5 MH/s (227.44ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3741.8 MH/s +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 2729.0 MH/s (220.41ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2709.3 MH/s (221.94ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 5438.4 MH/s +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 90043.8 kH/s (420.25ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 685.1 MH/s (52.21ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 775.2 MH/s +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 1203.4 MH/s (250.18ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1240.8 MH/s (242.56ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 2444.3 MH/s +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 48853 H/s (306.84ms) @ Accel:256 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 52034 H/s (294.58ms) @ Accel:256 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 100.9 kH/s +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 48928 H/s (306.68ms) @ Accel:64 Loops:124 Thr:128 Vec:1 +Speed.#2.........: 52089 H/s (294.42ms) @ Accel:64 Loops:124 Thr:128 Vec:1 +Speed.#*.........: 101.0 kH/s +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 360.4 kH/s (348.62ms) @ Accel:512 Loops:124 Thr:128 Vec:1 +Speed.#2.........: 388.8 kH/s (328.09ms) @ Accel:512 Loops:124 Thr:128 Vec:1 +Speed.#*.........: 749.2 kH/s +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 235.6 kH/s (354.15ms) @ Accel:2048 Loops:127 Thr:32 Vec:1 +Speed.#2.........: 247.2 kH/s (331.77ms) @ Accel:2048 Loops:127 Thr:32 Vec:1 +Speed.#*.........: 482.8 kH/s +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#*.........: 0 H/s +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 366.4 kH/s (393.24ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 383.7 kH/s (375.82ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 750.1 kH/s +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 33892 H/s (0.00ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#2.........: 10305 H/s (0.00ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#*.........: 44196 H/s +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 1393 H/s (366.97ms) @ Accel:4096 Loops:4096 Thr:32 Vec:1 +Speed.#2.........: 1464 H/s (348.94ms) @ Accel:4096 Loops:4096 Thr:32 Vec:1 +Speed.#*.........: 2857 H/s +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 721.8 MH/s (417.47ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 829.8 MH/s (363.19ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1551.6 MH/s +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 1166.2 MH/s (516.46ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2075.6 MH/s (289.99ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3241.8 MH/s +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 167.1 kH/s (426.97ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 186.0 kH/s (383.17ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 353.1 kH/s +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#2.........: 525.4 MH/s (286.85ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 525.4 MH/s +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 105.8 kH/s (342.22ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 111.5 kH/s (327.59ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 217.3 kH/s +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#2.........: 494 H/s (48.42ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 494 H/s +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 175.1 MH/s (429.95ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 255.5 MH/s (295.87ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 430.6 MH/s +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 463.6 MH/s (648.21ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 731.4 MH/s (419.19ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1195.0 MH/s +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 401.5 MH/s (383.19ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 437.4 MH/s (350.27ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 838.9 MH/s +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 215.3 MH/s (701.11ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 330.5 MH/s (455.79ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 545.8 MH/s +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 200.0 MH/s (380.37ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 263.5 MH/s (287.25ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 463.5 MH/s +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 757.3 MH/s (397.58ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 762.4 MH/s (395.47ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1519.7 MH/s +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 607.9 MH/s (247.50ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 516.4 MH/s (292.30ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 1124.3 MH/s +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 409.4 MH/s (367.53ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 327.3 MH/s (460.32ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 736.8 MH/s +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 1387.4 kH/s (264.84ms) @ Accel:256 Loops:499 Thr:256 Vec:1 +Speed.#2.........: 1449.0 kH/s (253.27ms) @ Accel:256 Loops:499 Thr:256 Vec:1 +Speed.#*.........: 2836.4 kH/s +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 712.1 kH/s (394.07ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#2.........: 749.9 kH/s (376.26ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Speed.#*.........: 1462.0 kH/s +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 743.1 kH/s (384.05ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 777.1 kH/s (367.28ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 1520.2 kH/s +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 12162 H/s (247.11ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 13238 H/s (226.94ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 25399 H/s +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 45320 H/s (285.03ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 46141 H/s (281.48ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 91461 H/s +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 24458 H/s (522.33ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 24870 H/s (518.30ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 49328 H/s +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 26129 H/s (694.25ms) @ Accel:256 Loops:16384 Thr:64 Vec:1 +Speed.#2.........: 26368 H/s (695.42ms) @ Accel:256 Loops:16384 Thr:64 Vec:1 +Speed.#*.........: 52498 H/s +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 25841 H/s (691.15ms) @ Accel:512 Loops:16384 Thr:32 Vec:1 +Speed.#2.........: 26123 H/s (693.08ms) @ Accel:512 Loops:16384 Thr:32 Vec:1 +Speed.#*.........: 51965 H/s +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#2.........: 1144.5 kH/s (473.85ms) @ Accel:1024 Loops:1 Thr:32 Vec:1 +Speed.#*.........: 1144.5 kH/s +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 5536.2 MH/s (109.85ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 5561.1 MH/s (109.20ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 11097.3 MH/s +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 4760.0 MH/s (127.62ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 4887.8 MH/s (124.01ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 9647.9 MH/s +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 303.1 kH/s (384.46ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 317.0 kH/s (367.64ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 620.1 kH/s +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 80885 H/s (245.86ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 87983 H/s (225.94ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 168.9 kH/s +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 965.3 MH/s (624.42ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 2006.0 MH/s (300.17ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 2971.3 MH/s +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 709.3 kH/s (393.87ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 746.3 kH/s (376.15ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 1455.6 kH/s +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 574.5 kH/s (247.33ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 596.4 kH/s (236.85ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1170.9 kH/s +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 1258 H/s (266.28ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1347 H/s (248.72ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 2605 H/s +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 23844 H/s (393.24ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 25002 H/s (375.84ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 48846 H/s +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 3828.8 MH/s (156.91ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3863.0 MH/s (155.55ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7691.8 MH/s +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 5417.7 MH/s (112.30ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 5449.7 MH/s (111.20ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 10867.4 MH/s +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 62012 H/s (72.75ms) @ Accel:16 Loops:131072 Thr:128 Vec:1 +Speed.#2.........: 68025 H/s (66.23ms) @ Accel:16 Loops:131072 Thr:128 Vec:1 +Speed.#*.........: 130.0 kH/s +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 114.3 kH/s (79.83ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#2.........: 123.2 kH/s (73.77ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#*.........: 237.4 kH/s +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 120.5 kH/s (75.69ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#2.........: 128.7 kH/s (70.85ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#*.........: 249.1 kH/s +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 7649 H/s (393.35ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 8455 H/s (355.77ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 16104 H/s +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 15181.2 kH/s (30.33ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Speed.#2.........: 15201.4 kH/s (30.25ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Speed.#*.........: 30382.7 kH/s +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 292.1 kH/s (247.42ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 314.6 kH/s (227.56ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 606.7 kH/s +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 19180 H/s (469.39ms) @ Accel:32 Loops:32 Thr:16 Vec:1 +Speed.#2.........: 19168 H/s (469.60ms) @ Accel:32 Loops:32 Thr:16 Vec:1 +Speed.#*.........: 38348 H/s +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 4702.9 MH/s (130.56ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 4102.6 MH/s (147.40ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 8805.5 MH/s +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 19159 H/s (469.86ms) @ Accel:32 Loops:32 Thr:16 Vec:1 +Speed.#2.........: 19146 H/s (470.17ms) @ Accel:32 Loops:32 Thr:16 Vec:1 +Speed.#*.........: 38305 H/s +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 18525 H/s (247.55ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 20075 H/s (227.67ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 38600 H/s +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 3465.3 MH/s (173.47ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 3331.9 MH/s (180.42ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 6797.2 MH/s +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 139.6 MH/s (269.69ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 138.2 MH/s (272.38ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 277.9 MH/s +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 121.0 kH/s (241.58ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 126.3 kH/s (231.46ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 247.3 kH/s +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 100.1 MH/s (377.16ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 99615.4 kH/s (378.70ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 199.8 MH/s +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 794.5 MH/s (388.73ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 820.2 MH/s (378.66ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1614.7 MH/s +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 2043.9 MH/s (294.65ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1815.6 MH/s (330.75ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3859.5 MH/s +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1767.4 MH/s (339.52ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1640.0 MH/s (367.73ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3407.4 MH/s +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1424.0 MH/s (421.29ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1338.2 MH/s (450.23ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 2762.2 MH/s +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 21211 H/s (283.56ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 21262 H/s (282.78ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 42473 H/s +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 106.0 kH/s (86.31ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#2.........: 114.3 kH/s (80.02ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#*.........: 220.2 kH/s +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 106.0 kH/s (86.26ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#2.........: 113.9 kH/s (80.29ms) @ Accel:16 Loops:131072 Thr:256 Vec:1 +Speed.#*.........: 219.9 kH/s +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 82724 H/s (108.40ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Speed.#2.........: 85090 H/s (99.99ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Speed.#*.........: 167.8 kH/s +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 727.4 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 +Speed.#2.........: 412.7 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:128 Vec:1 +Speed.#*.........: 1140.1 kH/s +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 549.0 kH/s (0.00ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 +Speed.#2.........: 529.8 kH/s (0.00ms) @ Accel:2048 Loops:1024 Thr:64 Vec:1 +Speed.#*.........: 1078.8 kH/s +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 3489.7 MH/s (172.26ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3528.1 MH/s (170.33ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7017.8 MH/s +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 82692 H/s (108.42ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Speed.#2.........: 85145 H/s (100.05ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Speed.#*.........: 167.8 kH/s +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 150.8 kH/s (386.55ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 158.6 kH/s (369.49ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 309.4 kH/s +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 4336 H/s (247.51ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 4476 H/s (236.93ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 8812 H/s +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 3368 H/s (246.11ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 3470 H/s (235.52ms) @ Accel:1024 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 6838 H/s +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 2353.6 MH/s (255.82ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2411.3 MH/s (249.72ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4764.9 MH/s +Hash.Mode........: 3000 (LM) +Speed.#1.........: 916.4 MH/s (334.29ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 903.4 MH/s (338.68ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1819.9 MH/s +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 369.5 MH/s (408.29ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 374.2 MH/s (403.43ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 743.7 MH/s +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 19281 H/s (414.77ms) @ Accel:512 Loops:32 Thr:16 Vec:1 +Speed.#2.........: 19259 H/s (415.31ms) @ Accel:512 Loops:32 Thr:16 Vec:1 +Speed.#*.........: 38540 H/s +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 2634.3 MH/s (228.37ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2643.8 MH/s (227.48ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 5278.1 MH/s +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#2.........: 3357.0 MH/s (179.04ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3357.0 MH/s +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 1870.7 MH/s (323.79ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 4289.2 MH/s (140.68ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 6159.9 MH/s +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 2744.3 MH/s (219.26ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2660.9 MH/s (226.12ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 5405.3 MH/s +Hash.Mode........: 400 (phpass) +Speed.#1.........: 5496.6 kH/s (202.47ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 5500.9 kH/s (202.10ms) @ Accel:4096 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 10997.5 kH/s +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#2.........: 3136.3 MH/s (191.69ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3136.3 MH/s +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#2.........: 2721.2 MH/s (220.97ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 2721.2 MH/s +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 3464.5 MH/s (173.50ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3332.5 MH/s (180.37ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 6796.9 MH/s +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 2786.4 MH/s (215.88ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2815.9 MH/s (213.51ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 5602.2 MH/s +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 2313.1 MH/s (260.27ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2370.2 MH/s (254.03ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 4683.3 MH/s +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 2216.9 MH/s (271.69ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2287.4 MH/s (263.26ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 4504.3 MH/s +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 1588.4 MH/s (379.09ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1616.9 MH/s (372.44ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3205.3 MH/s +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 2835.2 MH/s (212.20ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2915.0 MH/s (206.28ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 5750.2 MH/s +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 2576.7 MH/s (233.59ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2641.3 MH/s (227.90ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 5218.1 MH/s +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 4505.1 MH/s (134.82ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 4826.6 MH/s (125.64ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 9331.7 MH/s +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 1150.4 MH/s (523.41ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3340.1 MH/s (179.93ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4490.5 MH/s +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 2240.6 MH/s (268.71ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 2241.5 MH/s (268.64ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 4482.1 MH/s +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 6802.8 kH/s (322.99ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#2.........: 7154.9 kH/s (306.48ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#*.........: 13957.7 kH/s +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 1050.0 MH/s (574.07ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 2136.1 MH/s (281.85ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 3186.2 MH/s +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 6808.6 kH/s (323.41ms) @ Accel:2048 Loops:1000 Thr:64 Vec:1 +Speed.#2.........: 7155.6 kH/s (306.54ms) @ Accel:2048 Loops:1000 Thr:64 Vec:1 +Speed.#*.........: 13964.2 kH/s +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 4926.2 MH/s (123.44ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 4997.2 MH/s (121.49ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 9923.4 MH/s +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 1156.3 kH/s (198.73ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#2.........: 1256.9 kH/s (183.17ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Speed.#*.........: 2413.2 kH/s +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 661.2 MH/s (455.84ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 662.3 MH/s (455.12ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 1323.6 MH/s +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 362.0 MH/s (416.18ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Speed.#2.........: 375.0 MH/s (401.81ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Speed.#*.........: 737.1 MH/s +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 2284.9 MH/s (263.42ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 2318.8 MH/s (259.63ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 4603.7 MH/s +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 4951.4 kH/s (223.99ms) @ Accel:512 Loops:1023 Thr:128 Vec:1 +Speed.#2.........: 5177.9 kH/s (213.73ms) @ Accel:512 Loops:1023 Thr:128 Vec:1 +Speed.#*.........: 10129.3 kH/s +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 3664.3 MH/s (164.04ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3605.8 MH/s (166.56ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7270.1 MH/s +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 1520.1 MH/s (396.44ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 1493.8 MH/s (403.22ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 3014.0 MH/s +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 2767.0 MH/s (217.46ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 2787.9 MH/s (215.68ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 5554.9 MH/s +Hash.Mode........: 6100 (Whirlpool) +Speed.#2.........: 276.2 MH/s (272.45ms) @ Accel:1024 Loops:64 Thr:64 Vec:1 +Speed.#*.........: 276.2 MH/s +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 236.3 kH/s (301.37ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 236.1 kH/s (300.94ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 472.4 kH/s +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 134.0 kH/s (263.05ms) @ Accel:1024 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 133.9 kH/s (262.77ms) @ Accel:1024 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 268.0 kH/s +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 93689 H/s (374.95ms) @ Accel:1024 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 93735 H/s (374.55ms) @ Accel:1024 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 187.4 kH/s +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 356.1 kH/s (348.69ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 388.6 kH/s (328.75ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 744.7 kH/s +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 178.1 kH/s (351.77ms) @ Accel:256 Loops:124 Thr:128 Vec:1 +Speed.#2.........: 196.0 kH/s (325.58ms) @ Accel:256 Loops:124 Thr:128 Vec:1 +Speed.#*.........: 374.2 kH/s +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 118.8 kH/s (275.48ms) @ Accel:512 Loops:62 Thr:64 Vec:1 +Speed.#2.........: 130.1 kH/s (258.58ms) @ Accel:512 Loops:62 Thr:64 Vec:1 +Speed.#*.........: 248.9 kH/s +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#2.........: 21088 H/s (288.25ms) @ Accel:16 Loops:499 Thr:64 Vec:1 +Speed.#*.........: 21088 H/s +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#2.........: 10686 H/s (339.34ms) @ Accel:8 Loops:249 Thr:128 Vec:1 +Speed.#*.........: 10686 H/s +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#2.........: 6813 H/s (318.00ms) @ Accel:128 Loops:15 Thr:64 Vec:1 +Speed.#*.........: 6813 H/s +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 439.0 kH/s (283.48ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 439.0 kH/s (282.87ms) @ Accel:2048 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 878.0 kH/s +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 244.8 kH/s (251.45ms) @ Accel:1024 Loops:124 Thr:32 Vec:1 +Speed.#2.........: 244.3 kH/s (251.20ms) @ Accel:1024 Loops:124 Thr:32 Vec:1 +Speed.#*.........: 489.0 kH/s +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 172.8 kH/s (354.40ms) @ Accel:512 Loops:124 Thr:64 Vec:1 +Speed.#2.........: 173.1 kH/s (352.98ms) @ Accel:512 Loops:124 Thr:64 Vec:1 +Speed.#*.........: 345.9 kH/s +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 6816.8 kH/s (322.90ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#2.........: 7153.0 kH/s (306.51ms) @ Accel:4096 Loops:1000 Thr:32 Vec:1 +Speed.#*.........: 13969.8 kH/s +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 9619.2 kH/s (61.00ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 +Speed.#2.........: 10020.9 kH/s (58.43ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 +Speed.#*.........: 19640.1 kH/s +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 4180.5 kH/s (194.99ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 +Speed.#2.........: 4427.2 kH/s (181.87ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 +Speed.#*.........: 8607.6 kH/s +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 2739.9 kH/s (383.49ms) @ Accel:256 Loops:999 Thr:256 Vec:1 +Speed.#2.........: 2874.7 kH/s (366.44ms) @ Accel:256 Loops:999 Thr:256 Vec:1 +Speed.#*.........: 5614.6 kH/s +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 16717.3 kH/s (24.40ms) @ Accel:256 Loops:63 Thr:256 Vec:1 +Speed.#2.........: 17600.2 kH/s (23.33ms) @ Accel:256 Loops:63 Thr:256 Vec:1 +Speed.#*.........: 34317.6 kH/s +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 2091.6 kH/s (168.77ms) @ Accel:512 Loops:249 Thr:128 Vec:1 +Speed.#2.........: 2236.9 kH/s (154.91ms) @ Accel:512 Loops:249 Thr:128 Vec:1 +Speed.#*.........: 4328.5 kH/s +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 225.1 MH/s (334.64ms) @ Accel:1024 Loops:64 Thr:64 Vec:1 +Speed.#2.........: 225.0 MH/s (334.63ms) @ Accel:1024 Loops:64 Thr:64 Vec:1 +Speed.#*.........: 450.2 MH/s +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 3449.3 MH/s (174.25ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3537.2 MH/s (169.82ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 6986.5 MH/s +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 37718 H/s (395.77ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 40646 H/s (369.44ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 78365 H/s +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 1044.3 MH/s (288.44ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 1080.8 MH/s (278.64ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 2125.1 MH/s +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 237.4 kH/s (480.44ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 247.5 kH/s (467.68ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 484.9 kH/s +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#2.........: 2602.8 MH/s (229.75ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Speed.#*.........: 2602.8 MH/s +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#2.........: 2599.3 MH/s (230.64ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Speed.#*.........: 2599.3 MH/s +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#2.........: 1114.4 MH/s (270.22ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1114.4 MH/s +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#2.........: 1027.5 MH/s (293.09ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 1027.5 MH/s +Hash.Mode........: 7900 (Drupal7) +Speed.#2.........: 51192 H/s (358.80ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Speed.#*.........: 51192 H/s +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 3892.3 MH/s (154.35ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3985.3 MH/s (150.65ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7877.6 MH/s +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 9399 H/s (395.91ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#2.........: 10156 H/s (369.47ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Speed.#*.........: 19555 H/s +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 1474.9 MH/s (408.53ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1687.6 MH/s (356.87ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 3162.6 MH/s +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 1108.3 MH/s (271.75ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 1140.4 MH/s (264.09ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 2248.7 MH/s +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 902.7 MH/s (339.48ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#2.........: 903.5 MH/s (339.08ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Speed.#*.........: 1806.3 MH/s +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 91288.8 kH/s (413.29ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#2.........: 91537.9 kH/s (412.18ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Speed.#*.........: 182.8 MH/s +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 65441.2 kH/s (287.96ms) @ Accel:512 Loops:32 Thr:64 Vec:1 +Speed.#2.........: 65572.8 kH/s (287.26ms) @ Accel:512 Loops:32 Thr:64 Vec:1 +Speed.#*.........: 131.0 MH/s +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 738.5 kH/s (384.06ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#2.........: 771.5 kH/s (367.43ms) @ Accel:2048 Loops:512 Thr:32 Vec:1 +Speed.#*.........: 1510.0 kH/s +Hash.Mode........: 8900 (scrypt) +Speed.#2.........: 140.9 kH/s (1.34ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 140.9 kH/s +Hash.Mode........: 900 (MD4) +Speed.#1.........: 6491.4 MH/s (91.27ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 6607.9 MH/s (89.49ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 13099.3 MH/s +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 415.6 kH/s (450.77ms) @ Accel:1024 Loops:1000 Thr:16 Vec:1 +Speed.#2.........: 410.0 kH/s (457.63ms) @ Accel:1024 Loops:1000 Thr:16 Vec:1 +Speed.#*.........: 825.6 kH/s +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 598.6 kH/s (383.86ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 625.7 kH/s (367.15ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 1224.4 kH/s +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 60726 H/s (247.40ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#2.........: 62752 H/s (234.74ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Speed.#*.........: 123.5 kH/s +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 1458 H/s (5.85ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 1563 H/s (5.39ms) @ Accel:18 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 3021 H/s +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 122.1 kH/s (196.23ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 127.3 kH/s (188.26ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 249.3 kH/s +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 61149 H/s (196.21ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 63741 H/s (188.22ms) @ Accel:2048 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 124.9 kH/s +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 7611 H/s (351.83ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#2.........: 8407 H/s (318.44ms) @ Accel:8192 Loops:1024 Thr:32 Vec:1 +Speed.#*.........: 16018 H/s +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 342.7 MH/s (99.34ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 338.4 MH/s (92.24ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 681.1 MH/s +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 362.8 MH/s (90.07ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 357.8 MH/s (90.85ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 720.6 MH/s +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 3958.6 MH/s (151.77ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 3967.9 MH/s (151.31ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 7926.4 MH/s +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 6501.8 MH/s (91.13ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#2.........: 6599.3 MH/s (89.58ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Speed.#*.........: 13101.1 MH/s \ No newline at end of file diff --git a/tools/benchmarking/w-g4dn-benchmarks.txt b/tools/benchmarking/w-g4dn-benchmarks.txt new file mode 100644 index 0000000..4020860 --- /dev/null +++ b/tools/benchmarking/w-g4dn-benchmarks.txt @@ -0,0 +1,688 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 6210.1 MH/s (212.65ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 5250.0 MH/s (251.41ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 3582.4 MH/s (362.94ms) @ Accel:1024 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 6335.0 MH/s (209.24ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 55846 H/s (295.06ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 4802.7 MH/s (133.47ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 2401.7 MH/s (276.95ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 3864.1 kH/s (292.62ms) @ Accel:128 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 462.6 MH/s (361.71ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 518.2 MH/s (127.33ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 3478.4 MH/s (95.96ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 13656.0 kH/s (51.84ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 1844.6 MH/s (357.82ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 35563 H/s (566.03ms) @ Accel:16 Loops:4 Thr:512 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 762.0 MH/s (436.60ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 754.3 MH/s (441.19ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 766.2 MH/s (435.75ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 738.6 MH/s (450.27ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 776.8 MH/s (428.35ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 755.4 MH/s (441.02ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 1123.3 kH/s (272.88ms) @ Accel:32 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 3061.7 MH/s (431.93ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 4248.9 MH/s (306.44ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 4071.7 MH/s (324.35ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 3177.2 MH/s (209.74ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 1392.1 MH/s (240.00ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 5464 H/s (308.87ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 944.5 MH/s (355.43ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 3620.6 MH/s (182.13ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 5621 H/s (454.54ms) @ Accel:32 Loops:4096 Thr:256 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 40183.1 kH/s (260.78ms) @ Accel:4 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 14109.9 kH/s (371.53ms) @ Accel:8 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 19384.3 kH/s (270.39ms) @ Accel:16 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 40437.3 kH/s (259.17ms) @ Accel:4 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 12451.8 kH/s (420.92ms) @ Accel:8 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 16381.4 kH/s (320.02ms) @ Accel:16 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 5274.0 kH/s (262.90ms) @ Accel:1024 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 3134.9 MH/s (421.58ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 2487.9 kH/s (235.13ms) @ Accel:128 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 413.8 kH/s (260.31ms) @ Accel:64 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 13237 H/s (385.99ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 102.6 kH/s (395.99ms) @ Accel:64 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 2595.1 kH/s (301.88ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 18813 H/s (543.25ms) @ Accel:8 Loops:16384 Thr:512 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 1293.0 MH/s (258.49ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 23762.6 kH/s (38.89ms) @ Accel:512 Loops:9 Thr:256 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 7819.3 kH/s (222.86ms) @ Accel:512 Loops:99 Thr:128 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 283.2 kH/s (283.85ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 2792.2 MH/s (472.63ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 1992.2 MH/s (331.02ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 35689 H/s (277.99ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 385.2 MH/s (434.65ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 91772 H/s (357.27ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 3358.1 MH/s (196.53ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 111.5 kH/s (243.84ms) @ Accel:64 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 1835.7 MH/s (359.90ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 2446.9 kH/s (471.98ms) @ Accel:256 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 797 H/s (125.26ms) @ Accel:2048 Loops:250 Thr:256 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 471 H/s (212.15ms) @ Accel:512 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 329 H/s (151.95ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 846 H/s (154.77ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 425 H/s (153.88ms) @ Accel:2048 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 272 H/s (120.50ms) @ Accel:256 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 63 H/s (130.26ms) @ Accel:128 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 31 H/s (130.08ms) @ Accel:128 Loops:500 Thr:64 Vec:1 +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 21 H/s (195.73ms) @ Accel:128 Loops:500 Thr:64 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 1606 H/s (127.29ms) @ Accel:2048 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 910 H/s (112.70ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 632 H/s (161.98ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 1177 H/s (221.87ms) @ Accel:4096 Loops:500 Thr:128 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 600 H/s (217.97ms) @ Accel:2048 Loops:500 Thr:128 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 401 H/s (162.92ms) @ Accel:2048 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 2963 H/s (225.67ms) @ Accel:4096 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 1435 H/s (232.93ms) @ Accel:16384 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 948 H/s (176.53ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 586.5 MH/s (285.02ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 1273.9 MH/s (261.38ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 3057.6 MH/s (432.30ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 2020.5 MH/s (327.01ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 1620.5 MH/s (387.10ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 1818.9 MH/s (362.77ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 278.3 MH/s (3.79ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 1906.8 MH/s (345.94ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 1757.7 MH/s (375.18ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 1887.3 MH/s (349.73ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 301.6 MH/s (277.71ms) @ Accel:64 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 500.1 MH/s (334.69ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 244.4 MH/s (343.18ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 1004.4 MH/s (328.88ms) @ Accel:512 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 1956.7 MH/s (338.08ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 134.8 kH/s (240.19ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 110 H/s (241.65ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 4019.6 MH/s (40.18ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 1208.3 MH/s (276.33ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 128.9 MH/s (325.06ms) @ Accel:128 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 727.3 MH/s (459.48ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 183.5 kH/s (235.82ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 268.4 kH/s (240.46ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#1.........: 57226 H/s (480.48ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 138.9 MH/s (0.30ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 2908.3 MH/s (226.91ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 4499 H/s (283.89ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 1 H/s (1.44ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 52960 H/s (385.25ms) @ Accel:64 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 2095.2 MH/s (317.60ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 6843.2 kH/s (297.92ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 129.5 MH/s (322.86ms) @ Accel:64 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 4374.4 MH/s (297.30ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 58736 H/s (278.89ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 559.4 kH/s (279.11ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 5442.1 MH/s (238.76ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 334.2 MH/s (499.28ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 310.0 MH/s (270.14ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 55149 H/s (302.01ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 118.3 kH/s (275.39ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 3299.7 MH/s (393.28ms) @ Accel:1024 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 785.8 MH/s (423.38ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 774.4 MH/s (430.16ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 798.2 MH/s (416.85ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 783.5 MH/s (376.66ms) @ Accel:896 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 485.0 MH/s (346.21ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 892.9 MH/s (378.22ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 937.5 MH/s (358.51ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 1273.2 MH/s (523.68ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 743.0 MH/s (447.52ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 621.4 MH/s (269.39ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 784.4 MH/s (424.70ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 623.0 MH/s (268.71ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 179.8 MH/s (465.85ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 628.2 MH/s (266.47ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 389.5 MH/s (429.13ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 622.1 MH/s (269.10ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 779.6 MH/s (427.25ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 622.0 MH/s (269.05ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 619.5 MH/s (270.19ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 624.6 MH/s (267.97ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 105.8 kH/s (243.12ms) @ Accel:4096 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 621.9 MH/s (269.21ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 658.1 MH/s (508.53ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 384.9 MH/s (434.98ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 59023 H/s (277.10ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 13598 H/s (246.22ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 913.2 MH/s (369.12ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 941.8 kH/s (239.84ms) @ Accel:64 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 5143.5 MH/s (57.57ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 237.2 kH/s (272.60ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 134.2 kH/s (242.37ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 6959.1 kH/s (568.63ms) @ Accel:1024 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 2654.0 kH/s (1717.70ms) @ Accel:2048 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 1067.1 kH/s (2309.37ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 323.9 MH/s (515.92ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 35670.2 kH/s (588.46ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 651.6 kH/s (242.64ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 327.2 kH/s (245.13ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 649.9 kH/s (243.67ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 327.1 kH/s (245.32ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 4342.7 MH/s (303.95ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 4708.4 MH/s (136.05ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 123.3 GH/s (0.01ms) @ Accel:512 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 383.0 kH/s (256.42ms) @ Accel:256 Loops:499 Thr:32 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 185.8 kH/s (254.69ms) @ Accel:32 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 121.4 kH/s (282.32ms) @ Accel:4 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 16759 H/s (390.77ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 37630 H/s (304.36ms) @ Accel:128 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 21000 H/s (242.92ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 1670.8 MH/s (403.40ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 1360.7 MH/s (489.14ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 2209.6 kH/s (269.93ms) @ Accel:256 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 647.4 MH/s (258.36ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 397.1 MH/s (422.85ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 1605.1 MH/s (411.24ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 1536.0 MH/s (429.77ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 265.4 kH/s (243.11ms) @ Accel:256 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 382.2 MH/s (438.40ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 2417.8 MH/s (275.18ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 2903.2 MH/s (229.16ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 935.8 MH/s (358.35ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 1031.6 MH/s (322.73ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 49152 H/s (387.04ms) @ Accel:128 Loops:62 Thr:64 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 48442 H/s (396.46ms) @ Accel:64 Loops:62 Thr:128 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 416.6 kH/s (256.99ms) @ Accel:128 Loops:499 Thr:64 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 281.3 kH/s (266.85ms) @ Accel:64 Loops:511 Thr:128 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 288.5 kH/s (317.87ms) @ Accel:512 Loops:255 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 330.1 kH/s (243.59ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 182.7 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 1312 H/s (389.95ms) @ Accel:512 Loops:4096 Thr:256 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 780.4 MH/s (426.75ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 1746.2 MH/s (377.84ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 159.0 kH/s (503.91ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 403.6 MH/s (413.97ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 96555 H/s (421.19ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 1194 H/s (46.38ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 239.8 MH/s (349.50ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 625.9 MH/s (535.90ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 400.9 MH/s (417.40ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 306.4 MH/s (273.29ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 275.3 MH/s (304.37ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 518.0 MH/s (321.36ms) @ Accel:256 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 407.7 MH/s (409.78ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 348.3 MH/s (240.43ms) @ Accel:64 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 1276.2 kH/s (240.48ms) @ Accel:64 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 648.4 kH/s (244.37ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 662.1 kH/s (239.25ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 11857 H/s (282.36ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 40678 H/s (340.06ms) @ Accel:32 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 20703 H/s (665.40ms) @ Accel:32 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 18988 H/s (537.68ms) @ Accel:8 Loops:16384 Thr:512 Vec:1 +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 18372 H/s (534.39ms) @ Accel:128 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 757.8 kH/s (820.68ms) @ Accel:16 Loops:1 Thr:1024 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 5254.7 MH/s (247.73ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 4569.0 MH/s (284.24ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 273.0 kH/s (236.35ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 77786 H/s (280.33ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 1560.4 MH/s (423.07ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 638.3 kH/s (246.19ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 529.8 kH/s (300.05ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 1326 H/s (253.01ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 21204 H/s (245.26ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 3876.6 MH/s (334.23ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 1013.2 MH/s (329.72ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 4760.7 MH/s (273.48ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 40945 H/s (496.49ms) @ Accel:128 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 73701 H/s (1101.23ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 78983 H/s (515.25ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 8550 H/s (391.58ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 13740.4 kH/s (51.53ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 266.6 kH/s (302.20ms) @ Accel:128 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 31105 H/s (321.30ms) @ Accel:16 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 5303.7 MH/s (56.98ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 31101 H/s (321.28ms) @ Accel:16 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 17857 H/s (285.63ms) @ Accel:128 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 3328.8 MH/s (396.54ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 63464.4 kH/s (330.06ms) @ Accel:64 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 110.5 kH/s (295.01ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 43336.7 kH/s (241.65ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 818.6 MH/s (410.00ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1470.8 MH/s (226.44ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1340.8 MH/s (249.12ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1082.1 MH/s (308.71ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 18465 H/s (361.99ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 81451 H/s (497.93ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 82080 H/s (494.33ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 51701 H/s (392.24ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 2902.6 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 2608.3 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 3212.3 MH/s (205.42ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 51722 H/s (392.02ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 135.5 kH/s (239.38ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 3935 H/s (303.39ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 3121 H/s (295.87ms) @ Accel:64 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 4456.6 MH/s (296.50ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 1997.7 MH/s (330.86ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 983.8 MH/s (341.40ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 264.5 MH/s (316.95ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 30886 H/s (258.80ms) @ Accel:512 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 2688.0 MH/s (247.57ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 3243.4 MH/s (406.77ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 4452.3 MH/s (296.80ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 2906.7 MH/s (228.83ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 4911.0 MH/s (268.84ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 5001.5 kH/s (403.69ms) @ Accel:512 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 3099.7 MH/s (425.71ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 2916.7 MH/s (452.32ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 3331.9 MH/s (396.16ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 2479.3 MH/s (268.40ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 1843.0 MH/s (358.18ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 1778.5 MH/s (370.83ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 1230.2 MH/s (271.55ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 2546.5 MH/s (261.20ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 2467.6 MH/s (269.70ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 4933.5 MH/s (267.58ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 2662.6 MH/s (495.41ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 2408.9 MH/s (276.27ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 6900.1 kH/s (294.66ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 1666.9 MH/s (396.09ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 6828.8 kH/s (297.63ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 5019.7 MH/s (259.04ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 1117.2 kH/s (187.08ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 690.1 MH/s (242.50ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 296.5 MH/s (282.50ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 5500.0 MH/s (236.16ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 1057.6 MH/s (315.86ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 2011.2 MH/s (328.52ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 4094.7 kH/s (274.25ms) @ Accel:128 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 3692.0 MH/s (351.63ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 1302.3 MH/s (255.64ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 2901.1 MH/s (229.26ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 253.2 MH/s (330.89ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 251.4 kH/s (302.19ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 137.9 kH/s (267.35ms) @ Accel:128 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 95875 H/s (380.58ms) @ Accel:128 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 378.4 kH/s (258.09ms) @ Accel:64 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 183.3 kH/s (260.04ms) @ Accel:32 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 120.0 kH/s (286.41ms) @ Accel:16 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 34454 H/s (197.86ms) @ Accel:2 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 16664 H/s (204.14ms) @ Accel:2 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 11117 H/s (363.36ms) @ Accel:4 Loops:249 Thr:128 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 472.0 kH/s (241.54ms) @ Accel:128 Loops:249 Thr:128 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 250.2 kH/s (238.97ms) @ Accel:128 Loops:124 Thr:128 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 169.2 kH/s (345.37ms) @ Accel:128 Loops:124 Thr:128 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 6898.5 kH/s (295.96ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 10852.1 kH/s (304.32ms) @ Accel:512 Loops:63 Thr:256 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 5043.4 kH/s (399.36ms) @ Accel:512 Loops:63 Thr:128 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 2491.0 kH/s (234.65ms) @ Accel:256 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 18494.9 kH/s (122.08ms) @ Accel:1024 Loops:63 Thr:128 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 2141.4 kH/s (271.77ms) @ Accel:64 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 187.0 MH/s (446.92ms) @ Accel:64 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 4945.9 MH/s (262.74ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 2923.8 MH/s (225.69ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 41433 H/s (394.08ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 876.5 MH/s (379.81ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 207.0 kH/s (310.10ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 387.0 MH/s (432.72ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 2026.2 MH/s (163.16ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 2068.0 MH/s (159.76ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 635.6 MH/s (262.83ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 659.3 MH/s (253.63ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 50745 H/s (402.51ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 316.1 MH/s (265.05ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 3276.6 MH/s (201.34ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 10474 H/s (393.17ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 1329.2 MH/s (500.26ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 858.8 MH/s (387.41ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 949.6 MH/s (352.89ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 135.3 MH/s (309.55ms) @ Accel:128 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 53691.3 kH/s (390.50ms) @ Accel:128 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 658.0 kH/s (239.27ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 285.2 kH/s (2.13ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 6008.7 MH/s (216.23ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 635.6 kH/s (312.01ms) @ Accel:512 Loops:1000 Thr:16 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 531.1 kH/s (237.53ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 54356 H/s (302.28ms) @ Accel:128 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 17657 H/s (2.31ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 110.2 kH/s (480.60ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 54425 H/s (486.71ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 8672 H/s (308.58ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 348.5 MH/s (480.67ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 458.5 MH/s (143.74ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 1350.3 MH/s (247.43ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 383.0 MH/s (437.28ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 449.6 MH/s (146.69ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 1799.1 MH/s (185.91ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 3983.8 MH/s (324.88ms) @ Accel:8192 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 6425.9 MH/s (205.68ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-g5-benchmarks.txt b/tools/benchmarking/w-g5-benchmarks.txt new file mode 100644 index 0000000..6d77b93 --- /dev/null +++ b/tools/benchmarking/w-g5-benchmarks.txt @@ -0,0 +1,688 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 18520.6 MH/s (142.78ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 15495.5 MH/s (85.66ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 11397.4 MH/s (233.43ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 20180.5 MH/s (131.05ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 167.8 kH/s (390.38ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 16862.6 MH/s (75.59ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 8160.2 MH/s (163.45ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 10925.5 kH/s (399.13ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 1585.0 MH/s (422.21ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 1632.3 MH/s (38.18ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 12100.2 MH/s (55.94ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 36809.8 kH/s (31.93ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 6373.1 MH/s (209.46ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 151.3 kH/s (508.05ms) @ Accel:32 Loops:8 Thr:256 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 2579.4 MH/s (259.39ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 2537.6 MH/s (263.10ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 2530.6 MH/s (264.42ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 2509.1 MH/s (266.65ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 2522.8 MH/s (265.23ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 2544.6 MH/s (262.95ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 3299.2 kH/s (297.32ms) @ Accel:128 Loops:249 Thr:512 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 10724.7 MH/s (125.02ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 14530.1 MH/s (182.91ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 13350.8 MH/s (99.58ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 11389.6 MH/s (233.61ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 4620.4 MH/s (289.05ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 16539 H/s (408.45ms) @ Accel:8192 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 2563.1 MH/s (262.06ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 10250.2 MH/s (59.37ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 16167 H/s (631.75ms) @ Accel:256 Loops:4096 Thr:64 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 186.2 MH/s (450.20ms) @ Accel:32 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 66689.6 kH/s (314.06ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 91568.0 kH/s (457.65ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 186.1 MH/s (450.36ms) @ Accel:32 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 58497.5 kH/s (358.09ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 76600.9 kH/s (273.38ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 15865.8 kH/s (246.57ms) @ Accel:128 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 10668.7 MH/s (125.78ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 7260.8 kH/s (316.26ms) @ Accel:64 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 1238.9 kH/s (228.38ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 40406 H/s (252.81ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 309.9 kH/s (262.02ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 11810.6 kH/s (178.60ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 56675 H/s (720.65ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 4340.2 MH/s (307.78ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 55018.5 kH/s (11.61ms) @ Accel:256 Loops:9 Thr:256 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 22136.0 kH/s (292.21ms) @ Accel:256 Loops:99 Thr:512 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 849.7 kH/s (377.66ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 10333.2 MH/s (129.69ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 6646.4 MH/s (400.49ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 107.8 kH/s (371.22ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 1310.6 MH/s (255.49ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 428.5 kH/s (303.06ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 11017.7 MH/s (241.50ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 509.1 kH/s (424.53ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 5963.6 MH/s (223.92ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 6991.4 kH/s (321.28ms) @ Accel:64 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 2495 H/s (159.67ms) @ Accel:1024 Loops:500 Thr:1024 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 1427 H/s (139.72ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 1000 H/s (199.36ms) @ Accel:1024 Loops:250 Thr:1024 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 2502 H/s (209.13ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 1260 H/s (207.64ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 838 H/s (156.05ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 299 H/s (219.11ms) @ Accel:2048 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 138 H/s (118.25ms) @ Accel:512 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 92 H/s (177.37ms) @ Accel:1024 Loops:250 Thr:64 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 4993 H/s (163.52ms) @ Accel:1024 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 2852 H/s (143.07ms) @ Accel:1024 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 2000 H/s (204.07ms) @ Accel:1024 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 3469 H/s (150.73ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 1738 H/s (150.43ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 1158 H/s (112.88ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 8675 H/s (154.31ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 4345 H/s (154.03ms) @ Accel:1024 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 2896 H/s (115.49ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 2049.8 MH/s (326.48ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 4349.0 MH/s (307.20ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 10489.0 MH/s (128.10ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 6762.3 MH/s (393.74ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 6809.9 MH/s (74.63ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 6375.6 MH/s (209.35ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 496.7 MH/s (2.01ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 6261.4 MH/s (213.23ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 6193.2 MH/s (215.56ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 6254.7 MH/s (213.42ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 938.7 MH/s (356.87ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 1633.8 MH/s (408.92ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 710.8 MH/s (235.55ms) @ Accel:512 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 3317.0 MH/s (402.69ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 6501.6 MH/s (409.25ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 406.5 kH/s (318.76ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 332 H/s (321.23ms) @ Accel:8192 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 12190.5 MH/s (26.54ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 4015.9 MH/s (166.42ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 604.1 MH/s (277.18ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 2341.9 MH/s (285.73ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 540.5 kH/s (319.30ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 808.0 kH/s (318.62ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#1.........: 170.8 kH/s (319.15ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 181.4 MH/s (0.44ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 10050.4 MH/s (262.68ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 13516 H/s (377.66ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 1 H/s (1.70ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 159.3 kH/s (255.17ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 6812.7 MH/s (195.95ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 19385.5 kH/s (377.54ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 603.4 MH/s (277.46ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 15735.2 MH/s (168.88ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 176.7 kH/s (370.81ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 1698.2 kH/s (368.84ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 19303.0 MH/s (137.28ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 1536.8 MH/s (435.32ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 1684.7 MH/s (396.01ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 167.8 kH/s (390.07ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 351.9 kH/s (369.30ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 11006.8 MH/s (241.83ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 2608.0 MH/s (256.50ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 2560.7 MH/s (261.28ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 2565.9 MH/s (260.67ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 1807.6 MH/s (220.02ms) @ Accel:608 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 1484.8 MH/s (450.66ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 2265.5 MH/s (296.60ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 2255.2 MH/s (298.59ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 2144.5 MH/s (316.33ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 2535.7 MH/s (263.84ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 1850.8 MH/s (361.58ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 2555.6 MH/s (261.78ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 1851.0 MH/s (361.63ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 625.6 MH/s (267.78ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 1844.5 MH/s (362.87ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 1242.4 MH/s (269.49ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 1845.9 MH/s (362.64ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 2571.9 MH/s (260.13ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 1851.8 MH/s (361.46ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 1850.4 MH/s (361.65ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 1844.5 MH/s (362.93ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 344.5 kH/s (299.77ms) @ Accel:32768 Loops:512 Thr:32 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 1845.3 MH/s (362.66ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 2072.0 MH/s (324.80ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 1315.1 MH/s (254.57ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 176.6 kH/s (370.85ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 41027 H/s (326.13ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 2475.6 MH/s (271.75ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 3046.0 kH/s (323.57ms) @ Accel:64 Loops:1023 Thr:512 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 13345.8 MH/s (44.14ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 696.2 kH/s (371.87ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 407.3 kH/s (318.78ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 17795.2 kH/s (214.28ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 6924.7 kH/s (668.81ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 4437.9 kH/s (539.81ms) @ Accel:512 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 1156.9 MH/s (289.84ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 161.6 MH/s (516.06ms) @ Accel:512 Loops:64 Thr:32 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 1940.4 kH/s (324.01ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 980.8 kH/s (326.07ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 1940.1 kH/s (324.02ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 982.0 kH/s (326.09ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 15378.9 MH/s (86.45ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 14712.8 MH/s (44.63ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 88917.5 MH/s (0.00ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 1095.7 kH/s (228.46ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 524.5 kH/s (227.95ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 344.8 kH/s (340.93ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 51096 H/s (255.88ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 115.8 kH/s (392.39ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 62878 H/s (324.16ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 2824.2 MH/s (237.71ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 2328.5 MH/s (289.18ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 6219.9 kH/s (296.86ms) @ Accel:128 Loops:249 Thr:1024 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 2155.5 MH/s (310.51ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 1494.4 MH/s (447.48ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 5701.3 MH/s (467.00ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 5372.7 MH/s (247.60ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 796.7 kH/s (322.90ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 1284.2 MH/s (260.52ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 8226.6 MH/s (162.18ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 9963.2 MH/s (267.03ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 2635.9 MH/s (255.32ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 3457.4 MH/s (386.51ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 154.1 kH/s (246.58ms) @ Accel:16 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 154.2 kH/s (246.57ms) @ Accel:16 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 1239.5 kH/s (228.38ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 787.4 kH/s (245.57ms) @ Accel:256 Loops:63 Thr:256 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 842.2 kH/s (212.86ms) @ Accel:512 Loops:255 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 987.2 kH/s (324.89ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 133.5 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 3884 H/s (263.30ms) @ Accel:1024 Loops:4096 Thr:256 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 2590.8 MH/s (258.31ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 6096.1 MH/s (218.98ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 431.4 kH/s (741.50ms) @ Accel:128 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 2030.1 MH/s (329.59ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 291.2 kH/s (278.76ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 3129 H/s (38.60ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 775.0 MH/s (432.57ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 1845.6 MH/s (364.90ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 1889.2 MH/s (356.22ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 1645.3 MH/s (408.08ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 1397.5 MH/s (479.04ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 2828.6 MH/s (236.49ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 2116.9 MH/s (315.93ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 1780.0 MH/s (375.54ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 3806.6 kH/s (255.97ms) @ Accel:256 Loops:249 Thr:256 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 1940.6 kH/s (324.15ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 1990.0 kH/s (316.41ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 35551 H/s (376.48ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 180.3 kH/s (164.23ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 93963 H/s (308.05ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 56715 H/s (719.74ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 51028 H/s (721.38ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 1779.0 kH/s (1408.47ms) @ Accel:64 Loops:1 Thr:512 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 18438.8 MH/s (74.18ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 15657.8 MH/s (169.78ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 813.5 kH/s (316.57ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 235.4 kH/s (370.00ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 5624.0 MH/s (237.46ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 1925.9 kH/s (327.12ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 1596.4 kH/s (397.52ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 4208 H/s (318.28ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 64101 H/s (326.20ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 13164.5 MH/s (202.27ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 3452.1 MH/s (386.99ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 16436.6 MH/s (161.66ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 87091 H/s (467.95ms) @ Accel:128 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 157.8 kH/s (1031.49ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 157.9 kH/s (1030.97ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 26415 H/s (253.21ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 36947.2 kH/s (31.91ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 808.5 kH/s (397.63ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 95163 H/s (314.21ms) @ Accel:16 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 13780.1 MH/s (38.67ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 95132 H/s (314.25ms) @ Accel:16 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 54060 H/s (377.68ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 12469.9 MH/s (106.92ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 142.3 MH/s (294.41ms) @ Accel:32 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 334.6 kH/s (388.67ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 94279.8 kH/s (444.53ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 2378.6 MH/s (282.58ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 7381.4 MH/s (357.63ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 6509.8 MH/s (408.69ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 5357.0 MH/s (249.18ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 86284 H/s (308.98ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 150.1 kH/s (1083.49ms) @ Accel:64 Loops:131072 Thr:256 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 150.1 kH/s (1082.83ms) @ Accel:64 Loops:131072 Thr:256 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 169.9 kH/s (475.33ms) @ Accel:8 Loops:262144 Thr:512 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 1917.7 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 1874.1 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 10282.0 MH/s (180.04ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 168.8 kH/s (480.05ms) @ Accel:128 Loops:262144 Thr:32 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 407.1 kH/s (318.78ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 12016 H/s (397.73ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 9371 H/s (392.87ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 14465.8 MH/s (91.85ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 6666.7 MH/s (399.06ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 2818.6 MH/s (238.15ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 1174.8 MH/s (569.92ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 93666 H/s (255.31ms) @ Accel:1024 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 9117.6 MH/s (291.90ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 11569.7 MH/s (115.41ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 13994.4 MH/s (95.07ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 9789.2 MH/s (136.48ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 14880.4 MH/s (89.43ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 15409.0 kH/s (258.95ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 10479.9 MH/s (127.94ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 10158.4 MH/s (131.85ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 12475.2 MH/s (106.76ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 8241.8 MH/s (322.92ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 6438.6 MH/s (413.27ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 6176.7 MH/s (431.05ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 4232.8 MH/s (315.60ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 8686.1 MH/s (306.29ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 8186.8 MH/s (325.15ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 15919.8 MH/s (83.58ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 10078.4 MH/s (132.89ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 8160.5 MH/s (163.49ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 19360.3 kH/s (377.56ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 5981.1 MH/s (445.13ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 19355.7 kH/s (377.57ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 17565.0 MH/s (151.23ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 3267.4 kH/s (254.26ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 2266.2 MH/s (294.70ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 1008.0 MH/s (332.02ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 19956.4 MH/s (132.66ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 3586.8 MH/s (372.64ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 6749.1 MH/s (394.45ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 11601.2 kH/s (372.11ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 12504.1 MH/s (212.72ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 4555.5 MH/s (293.17ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 9510.8 MH/s (279.83ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 1244.9 MH/s (269.00ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 749.4 kH/s (395.18ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 407.0 kH/s (345.04ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 279.4 kH/s (246.63ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 1094.3 kH/s (228.23ms) @ Accel:128 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 523.4 kH/s (229.98ms) @ Accel:64 Loops:124 Thr:256 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 344.6 kH/s (341.09ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 148.0 kH/s (242.35ms) @ Accel:64 Loops:124 Thr:64 Vec:1 +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 73187 H/s (270.35ms) @ Accel:1 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 49015 H/s (381.27ms) @ Accel:32 Loops:62 Thr:128 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 1363.8 kH/s (351.76ms) @ Accel:128 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 710.5 kH/s (311.86ms) @ Accel:64 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 480.6 kH/s (221.26ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 19365.3 kH/s (377.58ms) @ Accel:256 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 29128.1 kH/s (195.98ms) @ Accel:256 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 14554.9 kH/s (257.29ms) @ Accel:256 Loops:63 Thr:256 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 7242.8 kH/s (212.50ms) @ Accel:128 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 44384.0 kH/s (40.06ms) @ Accel:256 Loops:63 Thr:256 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 6257.5 kH/s (247.90ms) @ Accel:128 Loops:249 Thr:512 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 907.7 MH/s (367.92ms) @ Accel:512 Loops:64 Thr:128 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 16983.9 MH/s (156.49ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 10389.2 MH/s (256.08ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 127.5 kH/s (256.57ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 2937.2 MH/s (454.86ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 652.7 kH/s (393.22ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 1345.5 MH/s (248.91ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 7117.1 MH/s (48.49ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 8671.7 MH/s (45.62ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 1839.9 MH/s (360.47ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 1787.0 MH/s (371.23ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 147.8 kH/s (275.80ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 1104.9 MH/s (303.09ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 11468.2 MH/s (231.89ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 31916 H/s (258.97ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 4700.2 MH/s (284.22ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 2933.7 MH/s (455.45ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 2567.1 MH/s (261.67ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 540.6 MH/s (309.71ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 252.8 MH/s (331.42ms) @ Accel:8 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 1976.0 kH/s (318.49ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 719.0 kH/s (2.18ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 20524.3 MH/s (67.38ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 1925.5 kH/s (308.48ms) @ Accel:512 Loops:1000 Thr:24 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 1590.4 kH/s (316.42ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 167.8 kH/s (390.39ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 36814 H/s (2.26ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 326.8 kH/s (322.70ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 164.9 kH/s (322.50ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 26032 H/s (411.40ms) @ Accel:8192 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 993.3 MH/s (337.25ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 1464.2 MH/s (42.69ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 4026.4 MH/s (165.99ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 1268.9 MH/s (263.91ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 1411.6 MH/s (44.28ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 6248.9 MH/s (107.12ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 13853.5 MH/s (191.86ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 21124.8 MH/s (125.01ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-g5g-benchmarks.txt b/tools/benchmarking/w-g5g-benchmarks.txt new file mode 100644 index 0000000..30fb8c3 --- /dev/null +++ b/tools/benchmarking/w-g5g-benchmarks.txt @@ -0,0 +1,698 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 5686.3 MH/s (232.28ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 4519.8 MH/s (146.40ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 3442.0 MH/s (191.97ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 6078.3 MH/s (217.32ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 55889 H/s (294.47ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 5395.8 MH/s (245.01ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 2380.9 MH/s (279.59ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 3825.9 kH/s (296.47ms) @ Accel:128 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 431.9 MH/s (387.59ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 482.0 MH/s (137.50ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 3488.1 MH/s (95.84ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 13287.7 kH/s (53.78ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 1827.1 MH/s (364.30ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 31351 H/s (651.15ms) @ Accel:32 Loops:4 Thr:256 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 748.4 MH/s (444.83ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 735.8 MH/s (452.05ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 759.1 MH/s (438.19ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 712.6 MH/s (468.26ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 756.3 MH/s (440.50ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 739.7 MH/s (452.23ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 1082.5 kH/s (282.87ms) @ Accel:32 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 3095.2 MH/s (214.99ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 4262.2 MH/s (154.90ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 4023.0 MH/s (165.40ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 3100.1 MH/s (214.96ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 1340.8 MH/s (248.29ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 5319 H/s (396.29ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 924.5 MH/s (362.85ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 3512.9 MH/s (187.70ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 5470 H/s (467.24ms) @ Accel:32 Loops:4096 Thr:256 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 39785.8 kH/s (263.44ms) @ Accel:4 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 13937.3 kH/s (376.02ms) @ Accel:32 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 18795.4 kH/s (278.88ms) @ Accel:8 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 39832.4 kH/s (263.14ms) @ Accel:4 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 12250.3 kH/s (427.98ms) @ Accel:16 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 15840.2 kH/s (330.95ms) @ Accel:8 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 5408.6 kH/s (387.93ms) @ Accel:256 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 3215.9 MH/s (207.49ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 2431.4 kH/s (241.83ms) @ Accel:128 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 392.1 kH/s (405.40ms) @ Accel:16 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 12899 H/s (395.33ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 98147 H/s (413.51ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 2605.3 kH/s (227.59ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 18422 H/s (555.08ms) @ Accel:8 Loops:16384 Thr:512 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 1285.8 MH/s (259.84ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 21942.4 kH/s (15.31ms) @ Accel:2048 Loops:9 Thr:32 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 7304.1 kH/s (227.51ms) @ Accel:256 Loops:99 Thr:256 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 276.2 kH/s (290.95ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 2862.0 MH/s (232.45ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 1942.0 MH/s (340.80ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 34831 H/s (288.38ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 363.6 MH/s (460.64ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 91709 H/s (357.38ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 3279.7 MH/s (201.29ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 108.8 kH/s (249.39ms) @ Accel:16 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 1775.1 MH/s (375.18ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 2375.3 kH/s (242.97ms) @ Accel:256 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 795 H/s (125.51ms) @ Accel:2048 Loops:250 Thr:256 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 476 H/s (209.93ms) @ Accel:512 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 334 H/s (149.85ms) @ Accel:2048 Loops:1000 Thr:32 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 854 H/s (153.30ms) @ Accel:2048 Loops:500 Thr:128 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 424 H/s (154.55ms) @ Accel:2048 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 266 H/s (123.26ms) @ Accel:256 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 63 H/s (130.15ms) @ Accel:128 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 31 H/s (134.01ms) @ Accel:128 Loops:1000 Thr:32 Vec:1 +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 20 H/s (206.04ms) @ Accel:128 Loops:500 Thr:64 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 1562 H/s (130.72ms) @ Accel:2048 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 894 H/s (114.65ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 624 H/s (163.91ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 1142 H/s (229.16ms) @ Accel:2048 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 557 H/s (234.40ms) @ Accel:2048 Loops:250 Thr:256 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 375 H/s (174.20ms) @ Accel:2048 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 2873 H/s (233.14ms) @ Accel:2048 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 1411 H/s (118.80ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 940 H/s (178.17ms) @ Accel:2048 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 570.1 MH/s (293.26ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 1253.5 MH/s (266.54ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 3175.7 MH/s (210.00ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 1962.3 MH/s (337.36ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 1556.8 MH/s (427.86ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 1838.4 MH/s (362.00ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 273.3 MH/s (3.88ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 1884.4 MH/s (353.43ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 1748.5 MH/s (380.31ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 1868.6 MH/s (356.22ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 292.4 MH/s (286.56ms) @ Accel:64 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 491.1 MH/s (339.22ms) @ Accel:256 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 243.0 MH/s (344.62ms) @ Accel:512 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 985.5 MH/s (338.16ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 1889.3 MH/s (349.34ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 131.4 kH/s (246.96ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 110 H/s (241.46ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 3955.3 MH/s (100.83ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 1176.5 MH/s (284.00ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 128.7 MH/s (325.15ms) @ Accel:64 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 704.8 MH/s (474.12ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 177.4 kH/s (244.04ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 264.6 kH/s (243.56ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1 (context 1 and 2)) +Speed.#1.........: 54917 H/s (247.64ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 147.8 MH/s (0.30ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 2875.1 MH/s (231.40ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 4289 H/s (296.28ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 1 H/s (1.48ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2 (context 1 and 2)) +Speed.#1.........: 50083 H/s (406.58ms) @ Accel:64 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 1998.4 MH/s (333.21ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 6908.3 kH/s (295.10ms) @ Accel:1024 Loops:1000 Thr:64 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 131.1 MH/s (319.44ms) @ Accel:64 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 4430.6 MH/s (297.99ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 57511 H/s (284.06ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 551.9 kH/s (282.11ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 5640.1 MH/s (234.30ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 328.8 MH/s (507.82ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 303.6 MH/s (275.77ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 55597 H/s (293.95ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 113.8 kH/s (285.96ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 3249.0 MH/s (203.35ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 755.2 MH/s (442.93ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17010 (GPG (AES-128/AES-256 (SHA-1($pass)))) +Speed.#1.........: 1284.3 kH/s (453.96ms) @ Accel:64 Loops:65536 Thr:256 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 741.7 MH/s (449.93ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 769.8 MH/s (432.06ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 750.2 MH/s (379.27ms) @ Accel:864 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 475.4 MH/s (352.82ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 876.7 MH/s (385.31ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 928.0 MH/s (362.24ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 1294.4 MH/s (515.40ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 750.6 MH/s (443.53ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 624.0 MH/s (268.31ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 784.8 MH/s (424.18ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 619.1 MH/s (270.41ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 181.4 MH/s (462.30ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 619.3 MH/s (270.36ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 387.4 MH/s (432.30ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 619.2 MH/s (270.39ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 764.0 MH/s (436.04ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 617.7 MH/s (271.05ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 615.8 MH/s (271.90ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 629.2 MH/s (266.07ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 104.4 kH/s (246.33ms) @ Accel:4096 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 627.0 MH/s (267.01ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 672.2 MH/s (496.40ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 369.7 MH/s (452.88ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 59339 H/s (275.69ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 13697 H/s (244.47ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 936.8 MH/s (359.27ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 678.4 kH/s (449.16ms) @ Accel:256 Loops:1023 Thr:64 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 5014.8 MH/s (58.87ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 233.4 kH/s (277.86ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 133.0 kH/s (244.21ms) @ Accel:256 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 7420.4 kH/s (266.53ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 2848.3 kH/s (814.23ms) @ Accel:512 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 1132.5 kH/s (1090.93ms) @ Accel:128 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 321.8 MH/s (519.20ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 39773.2 kH/s (526.63ms) @ Accel:32 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 630.4 kH/s (250.57ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 318.6 kH/s (251.26ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 633.4 kH/s (249.40ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 318.5 kH/s (251.94ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 4551.8 MH/s (145.45ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 4435.9 MH/s (145.00ms) @ Accel:4096 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 11613.3 GH/s (0.01ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 363.3 kH/s (396.79ms) @ Accel:64 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 172.4 kH/s (404.85ms) @ Accel:8 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 115.7 kH/s (243.40ms) @ Accel:16 Loops:249 Thr:256 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 16497 H/s (404.48ms) @ Accel:128 Loops:512 Thr:64 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 38897 H/s (294.15ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 20999 H/s (243.05ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 1676.3 MH/s (401.51ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 1353.8 MH/s (491.71ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 2171.6 kH/s (275.83ms) @ Accel:64 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 631.1 MH/s (265.16ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 385.2 MH/s (434.70ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 1635.5 MH/s (406.93ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 1531.9 MH/s (434.81ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 259.5 kH/s (248.26ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 377.9 MH/s (443.48ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 2337.5 MH/s (284.78ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 2915.2 MH/s (228.34ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 909.5 MH/s (368.80ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 1013.1 MH/s (328.73ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 47566 H/s (403.78ms) @ Accel:64 Loops:62 Thr:128 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 47948 H/s (395.78ms) @ Accel:64 Loops:62 Thr:128 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 394.4 kH/s (273.32ms) @ Accel:64 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 271.0 kH/s (410.29ms) @ Accel:32 Loops:1023 Thr:128 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 265.2 kH/s (276.02ms) @ Accel:256 Loops:511 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 320.1 kH/s (250.81ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 119.0 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 1255 H/s (203.92ms) @ Accel:2048 Loops:4096 Thr:32 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 762.6 MH/s (436.76ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 1739.8 MH/s (382.42ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 154.6 kH/s (517.98ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 397.4 MH/s (420.28ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 94252 H/s (430.86ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 1187 H/s (47.46ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 236.6 MH/s (355.76ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 636.6 MH/s (526.73ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 412.9 MH/s (406.30ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 304.3 MH/s (275.35ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 264.6 MH/s (317.38ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 516.0 MH/s (322.69ms) @ Accel:256 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 410.9 MH/s (406.51ms) @ Accel:256 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 340.6 MH/s (245.96ms) @ Accel:64 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 1264.9 kH/s (243.08ms) @ Accel:64 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 635.2 kH/s (249.80ms) @ Accel:128 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 650.7 kH/s (242.88ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 40115 H/s (339.02ms) @ Accel:64 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 20413 H/s (640.77ms) @ Accel:64 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 18507 H/s (552.31ms) @ Accel:128 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 753.6 kH/s (825.25ms) @ Accel:16 Loops:1 Thr:1024 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 5419.3 MH/s (243.71ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 4284.6 MH/s (308.04ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 264.8 kH/s (243.73ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 76247 H/s (285.39ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 1598.1 MH/s (416.89ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 631.9 kH/s (249.69ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 527.3 kH/s (301.18ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 1243 H/s (269.90ms) @ Accel:256 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 20862 H/s (249.24ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 3805.9 MH/s (347.08ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 1007.2 MH/s (331.00ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 4840.4 MH/s (272.85ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 36173 H/s (563.35ms) @ Accel:32 Loops:131072 Thr:128 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 74133 H/s (1095.83ms) @ Accel:512 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 77856 H/s (520.93ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 8667 H/s (385.73ms) @ Accel:64 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - user and owner pass) +Speed.#1.........: 13367.8 kH/s (53.01ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 270.0 kH/s (297.76ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 28716 H/s (348.14ms) @ Accel:16 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 5811.5 MH/s (52.36ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 28720 H/s (348.16ms) @ Accel:16 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 18220 H/s (280.41ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 3484.8 MH/s (191.15ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 77078.8 kH/s (271.96ms) @ Accel:128 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 115.1 kH/s (282.56ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 43314.5 kH/s (241.83ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 835.7 MH/s (401.71ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1503.6 MH/s (443.19ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1355.8 MH/s (246.48ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 1094.6 MH/s (305.33ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 18531 H/s (359.66ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 26600 (MetaMask Wallet) +Speed.#1.........: 112.2 kH/s (288.11ms) @ Accel:512 Loops:512 Thr:32 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 82165 H/s (493.61ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 82931 H/s (488.29ms) @ Accel:256 Loops:131072 Thr:32 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 52316 H/s (386.49ms) @ Accel:16 Loops:262144 Thr:128 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 2989.5 kH/s (0.00ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 2897.1 kH/s (0.00ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 3311.9 MH/s (201.08ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 50481 H/s (400.81ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 133.4 kH/s (243.34ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 4037 H/s (296.09ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 3116 H/s (296.20ms) @ Accel:32 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 27700 (MultiBit Classic .wallet (scrypt)) +Speed.#1.........: 1211 H/s (46.45ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 27800 (MurmurHash3) +Speed.#1.........: 5396.3 MH/s (57.63ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 27900 (CRC32C) +Speed.#1.........: 3901.0 MH/s (170.72ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 28000 (CRC64Jones) +Speed.#1.........: 6288.4 MH/s (210.71ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 28100 (Windows Hello PIN/Password) +Speed.#1.........: 110.6 kH/s (293.56ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 4054.6 MH/s (164.18ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 1908.0 MH/s (345.76ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 1001.5 MH/s (334.89ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 261.9 MH/s (320.18ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 28710 H/s (348.15ms) @ Accel:16 Loops:32 Thr:16 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 2625.0 MH/s (253.75ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 3354.4 MH/s (198.54ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 3749.5 MH/s (177.73ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 2888.8 MH/s (230.59ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 4481.7 MH/s (147.94ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 5256.7 kH/s (399.55ms) @ Accel:512 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 3108.0 MH/s (214.57ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 2956.4 MH/s (225.25ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 3394.8 MH/s (196.70ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 2423.7 MH/s (274.65ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 1808.2 MH/s (365.27ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 1734.8 MH/s (383.73ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 1245.7 MH/s (268.19ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 2574.8 MH/s (258.41ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 2360.5 MH/s (282.01ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 4615.7 MH/s (143.25ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 2809.4 MH/s (236.89ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 2382.4 MH/s (279.54ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 6768.1 kH/s (302.02ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 1626.1 MH/s (409.32ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 6838.8 kH/s (297.07ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 5076.1 MH/s (260.09ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 1101.0 kH/s (190.20ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 669.2 MH/s (250.16ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 282.9 MH/s (296.12ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 5770.8 MH/s (228.63ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 1037.4 MH/s (322.26ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 1963.9 MH/s (335.93ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 3975.4 kH/s (284.30ms) @ Accel:128 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 3873.4 MH/s (171.73ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 1288.3 MH/s (259.41ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 2904.0 MH/s (229.25ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 250.0 MH/s (335.11ms) @ Accel:32 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 243.5 kH/s (311.82ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 133.9 kH/s (275.78ms) @ Accel:128 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 92433 H/s (397.70ms) @ Accel:128 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 363.1 kH/s (396.58ms) @ Accel:32 Loops:999 Thr:128 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 172.6 kH/s (405.46ms) @ Accel:64 Loops:999 Thr:32 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 115.0 kH/s (299.30ms) @ Accel:4 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 32401 H/s (210.56ms) @ Accel:4 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 16003 H/s (211.43ms) @ Accel:2 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 10702 H/s (421.13ms) @ Accel:8 Loops:124 Thr:128 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 454.6 kH/s (282.21ms) @ Accel:256 Loops:124 Thr:128 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 244.2 kH/s (246.51ms) @ Accel:256 Loops:124 Thr:64 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 168.3 kH/s (350.01ms) @ Accel:128 Loops:124 Thr:128 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 6741.2 kH/s (303.37ms) @ Accel:64 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 10744.2 kH/s (306.49ms) @ Accel:1024 Loops:63 Thr:128 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 4843.7 kH/s (415.27ms) @ Accel:512 Loops:63 Thr:128 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 2436.3 kH/s (162.43ms) @ Accel:256 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 18391.5 kH/s (60.28ms) @ Accel:2048 Loops:63 Thr:32 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 2059.0 kH/s (281.92ms) @ Accel:64 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 184.8 MH/s (452.26ms) @ Accel:64 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 4972.3 MH/s (265.48ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 2913.0 MH/s (228.39ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 40628 H/s (401.50ms) @ Accel:32 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 849.5 MH/s (392.29ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 207.4 kH/s (309.99ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 369.7 MH/s (452.97ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 1699.8 MH/s (194.41ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 2136.8 MH/s (155.32ms) @ Accel:2048 Loops:128 Thr:32 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 648.7 MH/s (257.90ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 643.1 MH/s (260.12ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 49989 H/s (407.81ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 310.1 MH/s (270.03ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 3438.0 MH/s (192.22ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 10259 H/s (407.93ms) @ Accel:64 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 1292.8 MH/s (515.06ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 834.7 MH/s (398.86ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 947.4 MH/s (354.48ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 135.5 MH/s (308.88ms) @ Accel:256 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 52462.5 kH/s (399.63ms) @ Accel:4 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 646.0 kH/s (244.04ms) @ Accel:128 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 284.9 kH/s (2.14ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 6290.8 MH/s (210.48ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 585.0 kH/s (340.21ms) @ Accel:512 Loops:1000 Thr:16 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 526.8 kH/s (239.59ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 57077 H/s (288.70ms) @ Accel:128 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 17745 H/s (2.29ms) @ Accel:40 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 109.9 kH/s (481.81ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 54784 H/s (483.54ms) @ Accel:512 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 8741 H/s (306.14ms) @ Accel:2048 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 345.7 MH/s (484.45ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 452.9 MH/s (146.35ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 1345.5 MH/s (248.30ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 371.9 MH/s (450.33ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 440.1 MH/s (150.55ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 1786.0 MH/s (187.30ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 4027.8 MH/s (327.67ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 6344.6 MH/s (209.14ms) @ Accel:4096 Loops:256 Thr:32 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-p2-benchmarks.txt b/tools/benchmarking/w-p2-benchmarks.txt new file mode 100644 index 0000000..9da9fbf --- /dev/null +++ b/tools/benchmarking/w-p2-benchmarks.txt @@ -0,0 +1,676 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 1502.7 MH/s (143.06ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 1449.4 MH/s (298.53ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 952.9 MH/s (227.05ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 1789.2 MH/s (116.62ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 13817 H/s (386.56ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 930.1 MH/s (111.81ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 565.9 MH/s (383.57ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 1081.7 kH/s (370.29ms) @ Accel:64 Loops:1023 Thr:512 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 90845.5 kH/s (299.71ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 105.9 MH/s (256.99ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 521.3 MH/s (209.07ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 3891.9 kH/s (86.66ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 496.9 MH/s (437.76ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 9388 H/s (340.94ms) @ Accel:8 Loops:4 Thr:512 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 185.0 MH/s (294.21ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 198.7 MH/s (273.21ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 200.8 MH/s (270.86ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 192.3 MH/s (283.00ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 199.6 MH/s (272.33ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 183.3 MH/s (297.16ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 299.3 kH/s (233.31ms) @ Accel:16 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 923.6 MH/s (235.04ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 1204.6 MH/s (359.24ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 1057.8 MH/s (205.65ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 853.4 MH/s (253.82ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 390.6 MH/s (278.01ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 1411 H/s (299.60ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 163.0 MH/s (335.32ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 982.0 MH/s (221.06ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 1867 H/s (445.21ms) @ Accel:8 Loops:4096 Thr:1024 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 18348.5 kH/s (370.86ms) @ Accel:64 Loops:32 Thr:256 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 3387.6 kH/s (251.20ms) @ Accel:32 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 4687.9 kH/s (363.11ms) @ Accel:64 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 16811.5 kH/s (405.13ms) @ Accel:8 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 3007.3 kH/s (282.96ms) @ Accel:64 Loops:16 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 3971.1 kH/s (428.75ms) @ Accel:64 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 1403.4 kH/s (276.37ms) @ Accel:64 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 875.4 MH/s (247.58ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 646.8 kH/s (211.84ms) @ Accel:64 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 98291 H/s (179.87ms) @ Accel:8 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 3451 H/s (240.72ms) @ Accel:8 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 24220 H/s (273.67ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 1363.1 kH/s (143.96ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 6285 H/s (528.86ms) @ Accel:64 Loops:16384 Thr:64 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 357.3 MH/s (304.16ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 11285.1 kH/s (91.93ms) @ Accel:1024 Loops:9 Thr:256 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 2459.0 kH/s (271.49ms) @ Accel:64 Loops:99 Thr:1024 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 74636 H/s (353.87ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 815.9 MH/s (265.98ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 543.0 MH/s (400.29ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 9404 H/s (347.80ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 66688.7 kH/s (408.22ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 35343 H/s (300.98ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 988.4 MH/s (219.77ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 43659 H/s (404.99ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 491.0 MH/s (221.14ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 642.0 kH/s (311.76ms) @ Accel:32 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 188 H/s (133.13ms) @ Accel:64 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 111 H/s (112.61ms) @ Accel:64 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 78 H/s (160.45ms) @ Accel:64 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 196 H/s (167.33ms) @ Accel:128 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 86 H/s (191.12ms) @ Accel:256 Loops:250 Thr:256 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 55 H/s (149.60ms) @ Accel:64 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 375 H/s (136.24ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 203 H/s (125.92ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 155 H/s (164.46ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 288 H/s (227.05ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 142 H/s (230.01ms) @ Accel:256 Loops:250 Thr:512 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 87 H/s (188.16ms) @ Accel:64 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 719 H/s (233.07ms) @ Accel:128 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 355 H/s (235.94ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 233 H/s (179.26ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 142.1 MH/s (382.48ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 337.7 MH/s (321.62ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 878.2 MH/s (246.62ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 565.3 MH/s (384.21ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 510.5 MH/s (426.02ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 490.4 MH/s (441.60ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 104.5 MH/s (10.07ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 503.0 MH/s (430.28ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 467.0 MH/s (464.21ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 497.1 MH/s (435.52ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 66060.7 kH/s (412.23ms) @ Accel:128 Loops:64 Thr:256 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 122.4 MH/s (444.34ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 47634.5 kH/s (285.88ms) @ Accel:128 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 244.4 MH/s (444.49ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 544.4 MH/s (397.57ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 33452 H/s (316.75ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 27 H/s (487.58ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 1645.7 MH/s (243.52ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 291.3 MH/s (372.94ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 34554.3 kH/s (393.99ms) @ Accel:256 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 181.5 MH/s (299.87ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 45699 H/s (309.68ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 67675 H/s (313.13ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#1.........: 14122 H/s (320.48ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 49424.6 kH/s (0.94ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 844.1 MH/s (257.24ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 1171 H/s (354.52ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 0 H/s (4.61ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 12420 H/s (266.99ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 540.8 MH/s (401.15ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 2023.2 kH/s (377.58ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 35834.1 kH/s (379.90ms) @ Accel:256 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 1271.3 MH/s (170.60ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 15449 H/s (347.01ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 149.9 kH/s (346.26ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 1515.0 MH/s (141.91ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 73129.3 kH/s (372.55ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 105.8 MH/s (256.74ms) @ Accel:128 Loops:32 Thr:512 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 13903 H/s (384.02ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 30724 H/s (347.82ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 993.5 MH/s (218.66ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 187.3 MH/s (290.10ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 199.5 MH/s (272.73ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 201.7 MH/s (269.27ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 105.8 MH/s (389.27ms) @ Accel:384 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 80535.5 kH/s (338.88ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 116.6 MH/s (466.69ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 121.4 MH/s (448.20ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 223.4 MH/s (485.89ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 195.8 MH/s (277.69ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 189.6 MH/s (287.08ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 203.3 MH/s (267.51ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 176.9 MH/s (307.72ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 45016.7 kH/s (302.06ms) @ Accel:8 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 187.5 MH/s (290.26ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 93138.5 kH/s (292.06ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 185.3 MH/s (293.70ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 186.1 MH/s (292.40ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 187.2 MH/s (290.59ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 174.9 MH/s (310.99ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 187.6 MH/s (290.15ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 33589 H/s (385.42ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 185.6 MH/s (293.12ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 122.4 MH/s (444.78ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 65216.8 kH/s (417.63ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 15500 H/s (345.08ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 3346 H/s (325.24ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 174.7 MH/s (314.12ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 115.3 kH/s (213.42ms) @ Accel:64 Loops:511 Thr:512 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 863.7 MH/s (121.05ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 61210 H/s (348.66ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 33378 H/s (317.96ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 1944.6 kH/s (1567.94ms) @ Accel:512 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 748.5 kH/s (1080.43ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 264.2 kH/s (3150.00ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 70459.0 kH/s (387.67ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 8808.2 kH/s (385.88ms) @ Accel:16 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 164.1 kH/s (319.98ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 81285 H/s (324.58ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 163.6 kH/s (321.18ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 81263 H/s (324.96ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 1434.9 MH/s (301.63ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 1066.0 MH/s (203.93ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 15818.5 MH/s (0.01ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 94418 H/s (175.34ms) @ Accel:8 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 38709 H/s (214.38ms) @ Accel:8 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 23903 H/s (494.84ms) @ Accel:32 Loops:999 Thr:32 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 3986 H/s (269.05ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 9526 H/s (389.30ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 5147 H/s (322.72ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 346.3 MH/s (629.73ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 234.9 MH/s (463.51ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 597.1 kH/s (232.55ms) @ Accel:32 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 148.1 MH/s (367.32ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 70667.2 kH/s (386.64ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 482.0 MH/s (225.57ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 427.4 MH/s (254.35ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 67286 H/s (314.69ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 87212.7 kH/s (312.21ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 625.9 MH/s (346.55ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 691.9 MH/s (313.36ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 205.7 MH/s (528.41ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 287.7 MH/s (377.87ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 12590 H/s (423.61ms) @ Accel:32 Loops:249 Thr:64 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 12326 H/s (253.08ms) @ Accel:64 Loops:62 Thr:64 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 98179 H/s (180.06ms) @ Accel:8 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 69626 H/s (175.36ms) @ Accel:8 Loops:511 Thr:512 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 53918 H/s (334.44ms) @ Accel:64 Loops:1023 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 84483 H/s (312.78ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 57145 H/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 273 H/s (233.87ms) @ Accel:64 Loops:4096 Thr:256 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 207.5 MH/s (262.06ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 465.3 MH/s (465.97ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 36466 H/s (725.84ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 137.5 MH/s (395.62ms) @ Accel:32 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 23566 H/s (281.65ms) @ Accel:64 Loops:512 Thr:64 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 167 H/s (76.39ms) @ Accel:13 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 57081.7 kH/s (478.76ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 134.1 MH/s (407.75ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 83573.8 kH/s (326.64ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 65025.3 kH/s (419.02ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 56369.7 kH/s (482.96ms) @ Accel:128 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 165.6 MH/s (328.59ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 119.3 MH/s (455.96ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 108.7 MH/s (250.35ms) @ Accel:16 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 332.6 kH/s (210.43ms) @ Accel:32 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 161.8 kH/s (324.91ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 167.4 kH/s (314.22ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 3094 H/s (351.78ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 10865 H/s (205.92ms) @ Accel:4 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 7729 H/s (289.39ms) @ Accel:4 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 6282 H/s (528.77ms) @ Accel:64 Loops:16384 Thr:64 Vec:1 +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 6181 H/s (528.76ms) @ Accel:64 Loops:16384 Thr:64 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 386.0 kH/s (528.19ms) @ Accel:16 Loops:1 Thr:1024 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 1477.1 MH/s (146.04ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 1272.7 MH/s (170.44ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 65914 H/s (322.55ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 20550 H/s (348.84ms) @ Accel:16 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 441.3 MH/s (246.10ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 171.6 kH/s (305.22ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 133.9 kH/s (392.57ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 275 H/s (304.85ms) @ Accel:64 Loops:1024 Thr:128 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 5211 H/s (325.92ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 1064.0 MH/s (204.31ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 278.9 MH/s (389.75ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 1266.8 MH/s (341.57ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 19235 H/s (687.78ms) @ Accel:128 Loops:131072 Thr:64 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 36497 H/s (1447.82ms) @ Accel:32 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 37476 H/s (705.31ms) @ Accel:16 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 2250 H/s (484.07ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 3904.0 kH/s (86.70ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 67094 H/s (394.17ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 3006 H/s (405.25ms) @ Accel:8 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 939.9 MH/s (110.72ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 3014 H/s (403.77ms) @ Accel:8 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 4770 H/s (348.44ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 973.8 MH/s (222.90ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 15280.0 kH/s (445.80ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 27885 H/s (381.07ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 2438.2 kH/s (349.10ms) @ Accel:4 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 185.1 MH/s (587.86ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 546.8 MH/s (397.13ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 464.2 MH/s (467.40ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 398.4 MH/s (272.98ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 6877 H/s (316.54ms) @ Accel:256 Loops:512 Thr:64 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 27499 H/s (481.25ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 27496 H/s (481.42ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 17621 H/s (374.95ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 1194.0 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 1298.7 kH/s (0.00ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 941.6 MH/s (230.61ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 17607 H/s (375.30ms) @ Accel:32 Loops:262144 Thr:64 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 33381 H/s (317.94ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 989 H/s (393.94ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 785 H/s (381.81ms) @ Accel:4 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 1334.9 MH/s (324.17ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 569.0 MH/s (381.44ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 210.0 MH/s (517.33ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 93270.3 kH/s (582.77ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 2501 H/s (299.51ms) @ Accel:64 Loops:32 Thr:12 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 625.7 MH/s (345.69ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 912.0 MH/s (238.22ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 1238.9 MH/s (348.94ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 722.7 MH/s (300.40ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 1422.0 MH/s (304.39ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 1352.4 kH/s (292.71ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 793.8 MH/s (273.06ms) @ Accel:1024 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 795.1 MH/s (273.06ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 976.4 MH/s (222.32ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 681.1 MH/s (318.84ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 526.9 MH/s (412.29ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 481.6 MH/s (225.76ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 327.7 MH/s (331.09ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 729.1 MH/s (297.86ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 617.1 MH/s (350.65ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 1314.6 MH/s (164.86ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 810.3 MH/s (267.50ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 540.6 MH/s (400.15ms) @ Accel:512 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 2028.8 kH/s (376.60ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 453.3 MH/s (239.59ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 2029.7 kH/s (376.11ms) @ Accel:256 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 1373.4 MH/s (157.92ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 296.2 kH/s (238.19ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 166.0 MH/s (327.77ms) @ Accel:16 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 78248.4 kH/s (347.11ms) @ Accel:128 Loops:32 Thr:512 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 1736.0 MH/s (121.05ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 246.2 MH/s (440.89ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 564.9 MH/s (384.11ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 1151.0 kH/s (235.04ms) @ Accel:128 Loops:511 Thr:512 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 1025.5 MH/s (212.11ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 433.7 MH/s (250.39ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 802.5 MH/s (270.55ms) @ Accel:64 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 100.6 MH/s (270.69ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 66155 H/s (384.03ms) @ Accel:8 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 33534 H/s (367.37ms) @ Accel:32 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 23008 H/s (264.74ms) @ Accel:64 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 93762 H/s (177.65ms) @ Accel:8 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 38671 H/s (214.80ms) @ Accel:8 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 23938 H/s (494.84ms) @ Accel:32 Loops:999 Thr:32 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 127.3 kH/s (252.91ms) @ Accel:8 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 63581 H/s (360.51ms) @ Accel:32 Loops:999 Thr:64 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 42510 H/s (213.31ms) @ Accel:64 Loops:249 Thr:64 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 2023.7 kH/s (377.48ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 3490.1 kH/s (386.25ms) @ Accel:128 Loops:63 Thr:1024 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 1381.4 kH/s (264.54ms) @ Accel:64 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 652.7 kH/s (209.13ms) @ Accel:64 Loops:499 Thr:512 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 6949.1 kH/s (301.13ms) @ Accel:512 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 589.4 kH/s (340.54ms) @ Accel:16 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 65958.4 kH/s (412.63ms) @ Accel:64 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 1415.5 MH/s (153.21ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 907.3 MH/s (239.30ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 9919 H/s (268.32ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 236.2 MH/s (230.17ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 52457 H/s (401.93ms) @ Accel:64 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 65584.5 kH/s (415.16ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 676.1 MH/s (161.04ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 690.8 MH/s (157.06ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 167.2 MH/s (325.48ms) @ Accel:128 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 182.8 MH/s (297.78ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 12476 H/s (266.19ms) @ Accel:16 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 66028.9 kH/s (412.25ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 1008.1 MH/s (215.45ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 2493 H/s (269.82ms) @ Accel:4 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 384.7 MH/s (282.59ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 230.0 MH/s (236.37ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 200.0 MH/s (544.78ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 21969.9 kH/s (309.88ms) @ Accel:128 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 19928.8 kH/s (341.29ms) @ Accel:32 Loops:16 Thr:1024 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 165.4 kH/s (316.87ms) @ Accel:32 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 29066 H/s (4.98ms) @ Accel:13 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 1852.5 MH/s (111.75ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 55909 H/s (451.73ms) @ Accel:256 Loops:1000 Thr:12 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 131.0 kH/s (319.59ms) @ Accel:64 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 13800 H/s (387.34ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 1897 H/s (5.15ms) @ Accel:13 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 28216 H/s (307.40ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 14023 H/s (309.99ms) @ Accel:32 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 2237 H/s (299.51ms) @ Accel:128 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 58286.2 kH/s (466.95ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 89924.4 kH/s (302.77ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 193.1 MH/s (281.87ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 75935.0 kH/s (358.58ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 96808.4 kH/s (281.22ms) @ Accel:256 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 406.9 MH/s (267.24ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 1092.2 MH/s (199.33ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 1840.1 MH/s (113.42ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-p3-benchmarks.txt b/tools/benchmarking/w-p3-benchmarks.txt new file mode 100644 index 0000000..055e1af --- /dev/null +++ b/tools/benchmarking/w-p3-benchmarks.txt @@ -0,0 +1,688 @@ +Hash.Mode........: 0 (MD5) +Speed.#1.........: 15415.1 MH/s (171.14ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10 (md5($pass.$salt)) +Speed.#1.........: 11178.7 MH/s (120.26ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 100 (SHA1) +Speed.#1.........: 9174.9 MH/s (287.48ms) @ Accel:1024 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1000 (NTLM) +Speed.#1.........: 16663.5 MH/s (158.12ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10000 (Django (PBKDF2-SHA256)) +Speed.#1.........: 147.6 kH/s (442.49ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 10100 (SipHash) +Speed.#1.........: 13824.0 MH/s (93.03ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 10200 (CRAM-MD5) +Speed.#1.........: 6523.9 MH/s (204.27ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10300 (SAP CODVN H (PWDSALTEDHASH) iSSHA-1) +Speed.#1.........: 9069.6 kH/s (448.31ms) @ Accel:256 Loops:1023 Thr:256 Vec:1 +Hash.Mode........: 10400 (PDF 1.1 - 1.3 (Acrobat 2 - 4)) +Speed.#1.........: 1392.5 MH/s (479.61ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10410 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1) +Speed.#1.........: 1657.6 MH/s (37.20ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10420 (PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2) +Speed.#1.........: 8882.8 MH/s (75.27ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 10500 (PDF 1.4 - 1.6 (Acrobat 5 - 8)) +Speed.#1.........: 27698.6 kH/s (30.89ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 10600 (PDF 1.7 Level 3 (Acrobat 9)) +Speed.#1.........: 4619.6 MH/s (287.97ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 10700 (PDF 1.7 Level 8 (Acrobat 10 - 11)) +Speed.#1.........: 81440 H/s (473.80ms) @ Accel:16 Loops:4 Thr:512 Vec:1 +Hash.Mode........: 10800 (SHA2-384) +Speed.#1.........: 2042.1 MH/s (326.21ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10810 (sha384($pass.$salt)) +Speed.#1.........: 1959.6 MH/s (339.51ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10820 (sha384($salt.$pass)) +Speed.#1.........: 1990.7 MH/s (334.07ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10830 (sha384(utf16le($pass).$salt)) +Speed.#1.........: 1891.4 MH/s (351.95ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10840 (sha384($salt.utf16le($pass))) +Speed.#1.........: 1984.2 MH/s (335.83ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10870 (sha384(utf16le($pass))) +Speed.#1.........: 2026.0 MH/s (328.31ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256) +Speed.#1.........: 2856.0 kH/s (422.32ms) @ Accel:16 Loops:999 Thr:1024 Vec:1 +Hash.Mode........: 110 (sha1($pass.$salt)) +Speed.#1.........: 7945.9 MH/s (167.34ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1100 (Domain Cached Credentials (DCC), MS Cache) +Speed.#1.........: 10849.1 MH/s (123.69ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11000 (PrestaShop) +Speed.#1.........: 10119.9 MH/s (133.15ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 11100 (PostgreSQL CRAM (MD5)) +Speed.#1.........: 8191.4 MH/s (162.35ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11200 (MySQL CRAM (SHA1)) +Speed.#1.........: 3491.1 MH/s (380.96ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 11300 (Bitcoin/Litecoin wallet.dat) +Speed.#1.........: 14134 H/s (477.55ms) @ Accel:1024 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 11400 (SIP digest authentication (MD5)) +Speed.#1.........: 2425.1 MH/s (548.70ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 11500 (CRC32) +Speed.#1.........: 8225.2 MH/s (161.42ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 11600 (7-Zip) +Speed.#1.........: 18700 H/s (545.43ms) @ Accel:128 Loops:4096 Thr:128 Vec:1 +Hash.Mode........: 11700 (GOST R 34.11-2012 (Streebog) 256-bit, big-endian) +Speed.#1.........: 164.5 MH/s (254.78ms) @ Accel:8 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 11750 (HMAC-Streebog-256 (key = $pass), big-endian) +Speed.#1.........: 45990.0 kH/s (457.35ms) @ Accel:32 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 11760 (HMAC-Streebog-256 (key = $salt), big-endian) +Speed.#1.........: 64422.7 kH/s (325.31ms) @ Accel:64 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 11800 (GOST R 34.11-2012 (Streebog) 512-bit, big-endian) +Speed.#1.........: 165.1 MH/s (253.67ms) @ Accel:8 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 11850 (HMAC-Streebog-512 (key = $pass), big-endian) +Speed.#1.........: 39625.3 kH/s (264.34ms) @ Accel:32 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 11860 (HMAC-Streebog-512 (key = $salt), big-endian) +Speed.#1.........: 51803.9 kH/s (404.04ms) @ Accel:64 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 11900 (PBKDF2-HMAC-MD5) +Speed.#1.........: 12807.7 kH/s (274.55ms) @ Accel:128 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 120 (sha1($salt.$pass)) +Speed.#1.........: 8356.4 MH/s (159.16ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 12000 (PBKDF2-HMAC-SHA1) +Speed.#1.........: 6143.4 kH/s (239.10ms) @ Accel:512 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 12100 (PBKDF2-HMAC-SHA512) +Speed.#1.........: 1015.0 kH/s (312.06ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 12200 (eCryptfs) +Speed.#1.........: 34924 H/s (292.47ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 12300 (Oracle T: Type (Oracle 12+)) +Speed.#1.........: 253.8 kH/s (319.77ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 12400 (BSDi Crypt, Extended DES) +Speed.#1.........: 9880.3 kH/s (199.13ms) @ Accel:256 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 12500 (RAR3-hp) +Speed.#1.........: 74940 H/s (543.58ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 12600 (ColdFusion 10+) +Speed.#1.........: 3380.4 MH/s (393.91ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 12700 (Blockchain, My Wallet) +Speed.#1.........: 35540.2 kH/s (13.04ms) @ Accel:512 Loops:9 Thr:128 Vec:1 +Hash.Mode........: 12800 (MS-AzureSync PBKDF2-HMAC-SHA256) +Speed.#1.........: 16600.0 kH/s (338.44ms) @ Accel:128 Loops:99 Thr:1024 Vec:1 +Hash.Mode........: 12900 (Android FDE (Samsung DEK)) +Speed.#1.........: 739.8 kH/s (433.06ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 130 (sha1(utf16le($pass).$salt)) +Speed.#1.........: 6893.6 MH/s (193.02ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1300 (SHA2-224) +Speed.#1.........: 5503.4 MH/s (480.09ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 13000 (RAR5) +Speed.#1.........: 94002 H/s (423.69ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP) +Speed.#1.........: 1001.2 MH/s (334.30ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 13200 (AxCrypt 1) +Speed.#1.........: 384.5 kH/s (337.86ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13300 (AxCrypt 1 in-memory SHA1) +Speed.#1.........: 9236.8 MH/s (285.83ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 13400 (KeePass 1 (AES/Twofish) and KeePass 2 (AES)) +Speed.#1.........: 463.0 kH/s (232.50ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13500 (PeopleSoft PS_TOKEN) +Speed.#1.........: 4481.2 MH/s (296.99ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13600 (WinZip) +Speed.#1.........: 5990.6 kH/s (359.36ms) @ Accel:128 Loops:999 Thr:256 Vec:1 +Hash.Mode........: 13711 (VeraCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 2197 H/s (181.65ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13712 (VeraCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 1254 H/s (158.94ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13713 (VeraCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 837 H/s (119.43ms) @ Accel:8192 Loops:500 Thr:32 Vec:1 +Hash.Mode........: 13721 (VeraCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 2038 H/s (128.26ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13722 (VeraCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 1033 H/s (126.73ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 +Hash.Mode........: 13723 (VeraCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 684 H/s (191.30ms) @ Accel:1024 Loops:500 Thr:256 Vec:1 +Hash.Mode........: 13731 (VeraCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 248 H/s (132.03ms) @ Accel:1024 Loops:250 Thr:128 Vec:1 +Hash.Mode........: 13732 (VeraCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 109 H/s (150.58ms) @ Accel:128 Loops:1000 Thr:128 Vec:1 +Hash.Mode........: 13733 (VeraCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 72 H/s (112.93ms) @ Accel:128 Loops:500 Thr:128 Vec:1 +Hash.Mode........: 13741 (VeraCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 4393 H/s (186.04ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13742 (VeraCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 2511 H/s (162.72ms) @ Accel:1024 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13743 (VeraCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 1754 H/s (116.36ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13751 (VeraCrypt SHA256 + XTS 512 bit) +Speed.#1.........: 2909 H/s (179.82ms) @ Accel:1024 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 13752 (VeraCrypt SHA256 + XTS 1024 bit) +Speed.#1.........: 1455 H/s (179.64ms) @ Accel:1024 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13753 (VeraCrypt SHA256 + XTS 1536 bit) +Speed.#1.........: 909 H/s (143.92ms) @ Accel:512 Loops:500 Thr:512 Vec:1 +Hash.Mode........: 13761 (VeraCrypt SHA256 + XTS 512 bit + boot-mode) +Speed.#1.........: 7272 H/s (184.11ms) @ Accel:1024 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 13762 (VeraCrypt SHA256 + XTS 1024 bit + boot-mode) +Speed.#1.........: 3639 H/s (183.94ms) @ Accel:1024 Loops:512 Thr:512 Vec:1 +Hash.Mode........: 13763 (VeraCrypt SHA256 + XTS 1536 bit + boot-mode) +Speed.#1.........: 2422 H/s (138.16ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 13800 (Windows Phone 8+ PIN/password) +Speed.#1.........: 1525.7 MH/s (436.63ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 13900 (OpenCart) +Speed.#1.........: 3319.5 MH/s (401.04ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 140 (sha1($salt.utf16le($pass))) +Speed.#1.........: 8222.4 MH/s (161.68ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1400 (SHA2-256) +Speed.#1.........: 5287.6 MH/s (251.66ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14000 (DES (PT = $salt, key = $pass)) +Speed.#1.........: 4865.8 MH/s (102.35ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1410 (sha256($pass.$salt)) +Speed.#1.........: 4620.9 MH/s (287.95ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14100 (3DES (PT = $salt, key = $pass)) +Speed.#1.........: 344.4 MH/s (2.94ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1420 (sha256($salt.$pass)) +Speed.#1.........: 4984.0 MH/s (266.95ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1430 (sha256(utf16le($pass).$salt)) +Speed.#1.........: 4133.9 MH/s (322.34ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1440 (sha256($salt.utf16le($pass))) +Speed.#1.........: 4900.7 MH/s (271.62ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 14400 (sha1(CX)) +Speed.#1.........: 760.0 MH/s (439.39ms) @ Accel:128 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 1450 (HMAC-SHA256 (key = $pass)) +Speed.#1.........: 1294.6 MH/s (258.04ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 14500 (Linux Kernel Crypto API (2.4)) +Speed.#1.........: 899.9 MH/s (374.74ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1460 (HMAC-SHA256 (key = $salt)) +Speed.#1.........: 2644.4 MH/s (251.73ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1470 (sha256(utf16le($pass))) +Speed.#1.........: 5051.9 MH/s (263.37ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 14700 (iTunes backup < 10.0) +Speed.#1.........: 357.0 kH/s (362.14ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 14800 (iTunes backup >= 10.0) +Speed.#1.........: 291 H/s (365.68ms) @ Accel:4096 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 14900 (Skip32 (PT = $salt, key = $pass)) +Speed.#1.........: 14080.2 MH/s (23.39ms) @ Accel:2048 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 150 (HMAC-SHA1 (key = $pass)) +Speed.#1.........: 3127.7 MH/s (213.78ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1500 (descrypt, DES (Unix), Traditional DES) +Speed.#1.........: 512.1 MH/s (326.75ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 15000 (FileZilla Server >= 0.9.55) +Speed.#1.........: 1818.6 MH/s (366.16ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 15100 (Juniper/NetBSD sha1crypt) +Speed.#1.........: 476.5 kH/s (360.26ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 15200 (Blockchain, My Wallet, V2) +Speed.#1.........: 709.3 kH/s (361.62ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 15300 (DPAPI masterkey file v1) +Speed.#1.........: 150.3 kH/s (361.34ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 15400 (ChaCha20) +Speed.#1.........: 91603.7 kH/s (0.96ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15500 (JKS Java Key Store Private Keys (SHA1)) +Speed.#1.........: 7084.3 MH/s (187.93ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 15600 (Ethereum Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 11732 H/s (432.96ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 15700 (Ethereum Wallet, SCRYPT) +Speed.#1.........: 1 H/s (2.07ms) @ Accel:1 Loops:1024 Thr:4 Vec:1 +Hash.Mode........: 15900 (DPAPI masterkey file v2) +Speed.#1.........: 129.7 kH/s (314.21ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 160 (HMAC-SHA1 (key = $salt)) +Speed.#1.........: 5385.0 MH/s (247.24ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 1600 (Apache $apr1$ MD5, md5apr1, MD5 (APR)) +Speed.#1.........: 14753.6 kH/s (444.10ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 16000 (Tripcode) +Speed.#1.........: 513.2 MH/s (326.19ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 16100 (TACACS+) +Speed.#1.........: 10979.2 MH/s (122.66ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 16200 (Apple Secure Notes) +Speed.#1.........: 154.0 kH/s (423.81ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16300 (Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256) +Speed.#1.........: 1471.6 kH/s (422.67ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 16400 (CRAM-MD5 Dovecot) +Speed.#1.........: 16113.9 MH/s (163.64ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 16500 (JWT (JSON Web Token)) +Speed.#1.........: 691.2 MH/s (483.99ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 16600 (Electrum Wallet (Salt-Type 1-3)) +Speed.#1.........: 1091.2 MH/s (306.27ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 16700 (FileVault 2) +Speed.#1.........: 147.5 kH/s (442.75ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 16900 (Ansible Vault) +Speed.#1.........: 306.8 kH/s (423.73ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 170 (sha1(utf16le($pass))) +Speed.#1.........: 9219.0 MH/s (286.32ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1700 (SHA2-512) +Speed.#1.........: 2071.5 MH/s (321.49ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1710 (sha512($pass.$salt)) +Speed.#1.........: 1976.1 MH/s (336.51ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 1720 (sha512($salt.$pass)) +Speed.#1.........: 2013.4 MH/s (331.04ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17200 (PKZIP (Compressed)) +Speed.#1.........: 1400.7 MH/s (262.52ms) @ Accel:560 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17210 (PKZIP (Uncompressed)) +Speed.#1.........: 1362.6 MH/s (489.46ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 17220 (PKZIP (Compressed Multi-File)) +Speed.#1.........: 1840.3 MH/s (369.31ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17225 (PKZIP (Mixed Multi-File)) +Speed.#1.........: 1945.6 MH/s (349.66ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 17230 (PKZIP (Mixed Multi-File Checksum-Only)) +Speed.#1.........: 3038.0 MH/s (437.64ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 1730 (sha512(utf16le($pass).$salt)) +Speed.#1.........: 1917.4 MH/s (346.97ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17300 (SHA3-224) +Speed.#1.........: 1662.9 MH/s (401.85ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1740 (sha512($salt.utf16le($pass))) +Speed.#1.........: 2008.9 MH/s (331.82ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17400 (SHA3-256) +Speed.#1.........: 1660.1 MH/s (402.55ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 1750 (HMAC-SHA512 (key = $pass)) +Speed.#1.........: 468.8 MH/s (357.05ms) @ Accel:32 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17500 (SHA3-384) +Speed.#1.........: 1662.4 MH/s (401.89ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1760 (HMAC-SHA512 (key = $salt)) +Speed.#1.........: 955.0 MH/s (349.63ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17600 (SHA3-512) +Speed.#1.........: 1662.3 MH/s (401.95ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1770 (sha512(utf16le($pass))) +Speed.#1.........: 2051.2 MH/s (324.71ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 17700 (Keccak-224) +Speed.#1.........: 1657.8 MH/s (402.86ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 17800 (Keccak-256) +Speed.#1.........: 1654.0 MH/s (403.88ms) @ Accel:64 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 17900 (Keccak-384) +Speed.#1.........: 1657.5 MH/s (403.02ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix)) +Speed.#1.........: 376.9 kH/s (270.38ms) @ Accel:4096 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 18000 (Keccak-512) +Speed.#1.........: 1657.4 MH/s (403.06ms) @ Accel:256 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 18100 (TOTP (HMAC-SHA1)) +Speed.#1.........: 1592.1 MH/s (419.64ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) +Speed.#1.........: 983.3 MH/s (340.17ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 18300 (Apple File System (APFS)) +Speed.#1.........: 153.0 kH/s (425.75ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 18400 (Open Document Format (ODF) 1.2 (SHA-256, AES)) +Speed.#1.........: 35960 H/s (371.66ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 18500 (sha1(md5(md5($pass)))) +Speed.#1.........: 2382.6 MH/s (561.01ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 18600 (Open Document Format (ODF) 1.1 (SHA-1, Blowfish)) +Speed.#1.........: 2388.1 kH/s (246.78ms) @ Accel:128 Loops:511 Thr:512 Vec:1 +Hash.Mode........: 18700 (Java Object hashCode()) +Speed.#1.........: 10174.5 MH/s (108.22ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 18800 (Blockchain, My Wallet, Second Password (SHA256)) +Speed.#1.........: 613.8 kH/s (418.03ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 18900 (Android Backup) +Speed.#1.........: 357.4 kH/s (362.61ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 19000 (QNX /etc/shadow (MD5)) +Speed.#1.........: 13349.0 kH/s (261.55ms) @ Accel:2048 Loops:1000 Thr:32 Vec:1 +Hash.Mode........: 19100 (QNX /etc/shadow (SHA256)) +Speed.#1.........: 4596.2 kH/s (1001.64ms) @ Accel:128 Loops:1000 Thr:512 Vec:1 +Hash.Mode........: 19200 (QNX /etc/shadow (SHA512)) +Speed.#1.........: 1347.9 kH/s (1864.46ms) @ Accel:128 Loops:1000 Thr:256 Vec:1 +Hash.Mode........: 19300 (sha1($salt1.$pass.$salt2)) +Speed.#1.........: 771.5 MH/s (433.92ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 19500 (Ruby on Rails Restful-Authentication) +Speed.#1.........: 77930.3 kH/s (538.46ms) @ Accel:128 Loops:64 Thr:64 Vec:1 +Hash.Mode........: 19600 (Kerberos 5, etype 17, TGS-REP) +Speed.#1.........: 1706.6 kH/s (363.95ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 19700 (Kerberos 5, etype 18, TGS-REP) +Speed.#1.........: 858.2 kH/s (370.94ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 19800 (Kerberos 5, etype 17, Pre-Auth) +Speed.#1.........: 1704.7 kH/s (364.60ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 19900 (Kerberos 5, etype 18, Pre-Auth) +Speed.#1.........: 858.3 kH/s (371.74ms) @ Accel:256 Loops:1024 Thr:64 Vec:1 +Hash.Mode........: 20 (md5($salt.$pass)) +Speed.#1.........: 13208.4 MH/s (99.98ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 200 (MySQL323) +Speed.#1.........: 12258.8 MH/s (87.76ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 2000 (STDOUT) +Speed.#1.........: 55996.7 MH/s (0.01ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 20011 (DiskCryptor SHA512 + XTS 512 bit) +Speed.#1.........: 916.6 kH/s (312.18ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 20012 (DiskCryptor SHA512 + XTS 1024 bit) +Speed.#1.........: 438.3 kH/s (311.43ms) @ Accel:4 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 20013 (DiskCryptor SHA512 + XTS 1536 bit) +Speed.#1.........: 288.5 kH/s (466.80ms) @ Accel:4 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 20200 (Python passlib pbkdf2-sha512) +Speed.#1.........: 41728 H/s (314.75ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20300 (Python passlib pbkdf2-sha256) +Speed.#1.........: 101.5 kH/s (446.51ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 20400 (Python passlib pbkdf2-sha1) +Speed.#1.........: 55389 H/s (364.25ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 20500 (PKZIP Master Key) +Speed.#1.........: 3045.3 MH/s (434.65ms) @ Accel:2048 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 20510 (PKZIP Master Key (6 byte optimization)) +Speed.#1.........: 3198.6 MH/s (416.21ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20600 (Oracle Transportation Management (SHA256)) +Speed.#1.........: 5357.3 kH/s (338.87ms) @ Accel:128 Loops:249 Thr:1024 Vec:1 +Hash.Mode........: 20710 (sha256(sha256($pass).$salt)) +Speed.#1.........: 1740.6 MH/s (383.42ms) @ Accel:128 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 20720 (sha256($salt.sha256($pass))) +Speed.#1.........: 837.4 MH/s (401.45ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 20800 (sha256(md5($pass))) +Speed.#1.........: 4730.4 MH/s (279.40ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 20900 (md5(sha1($pass).md5($pass).sha1($pass))) +Speed.#1.........: 4504.2 MH/s (293.12ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 2100 (Domain Cached Credentials 2 (DCC2), MS Cache 2) +Speed.#1.........: 700.5 kH/s (363.81ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 21000 (BitShares v0.x - sha512(sha512_bin(pass))) +Speed.#1.........: 977.9 MH/s (341.37ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 21100 (sha1(md5($pass.$salt))) +Speed.#1.........: 5953.8 MH/s (223.25ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21200 (md5(sha1($salt).md5($pass))) +Speed.#1.........: 7960.5 MH/s (166.93ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 21300 (md5($salt.sha1($salt.$pass))) +Speed.#1.........: 2414.0 MH/s (550.62ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 21400 (sha256(sha256_bin($pass))) +Speed.#1.........: 2716.1 MH/s (244.97ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 21500 (SolarWinds Orion) +Speed.#1.........: 133.1 kH/s (283.85ms) @ Accel:16 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 21501 (SolarWinds Orion v2) +Speed.#1.........: 133.1 kH/s (283.84ms) @ Accel:16 Loops:62 Thr:512 Vec:1 +Hash.Mode........: 21600 (Web2py pbkdf2-sha512) +Speed.#1.........: 1012.0 kH/s (313.06ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 21700 (Electrum Wallet (Salt-Type 4)) +Speed.#1.........: 612.4 kH/s (319.62ms) @ Accel:8 Loops:1023 Thr:512 Vec:1 +Hash.Mode........: 21800 (Electrum Wallet (Salt-Type 5)) +Speed.#1.........: 583.1 kH/s (312.86ms) @ Accel:512 Loops:255 Thr:32 Vec:1 +Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) +Speed.#1.........: 874.7 kH/s (365.07ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 22001 (WPA-PMK-PMKID+EAPOL) +Speed.#1.........: 113.1 kH/s (0.00ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 22100 (BitLocker) +Speed.#1.........: 3032 H/s (337.18ms) @ Accel:4096 Loops:4096 Thr:64 Vec:1 +Hash.Mode........: 22200 (Citrix NetScaler (SHA512)) +Speed.#1.........: 2058.1 MH/s (323.60ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 22300 (sha256($salt.$pass.$salt)) +Speed.#1.........: 4632.8 MH/s (287.22ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 22400 (AES Crypt (SHA256)) +Speed.#1.........: 362.4 kH/s (881.13ms) @ Accel:64 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22500 (MultiBit Classic .key (MD5)) +Speed.#1.........: 1517.0 MH/s (438.65ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 22600 (Telegram Desktop < v2.1.14 (PBKDF2-HMAC-SHA1)) +Speed.#1.........: 253.3 kH/s (319.93ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 22700 (MultiBit HD (scrypt)) +Speed.#1.........: 2263 H/s (58.21ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 22911 (RSA/DSA/EC/OpenSSH Private Keys ($0$)) +Speed.#1.........: 501.3 MH/s (334.88ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 22921 (RSA/DSA/EC/OpenSSH Private Keys ($6$)) +Speed.#1.........: 1341.6 MH/s (496.15ms) @ Accel:512 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22931 (RSA/DSA/EC/OpenSSH Private Keys ($1, $3$)) +Speed.#1.........: 993.8 MH/s (339.11ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22941 (RSA/DSA/EC/OpenSSH Private Keys ($4$)) +Speed.#1.........: 750.2 MH/s (445.95ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 22951 (RSA/DSA/EC/OpenSSH Private Keys ($5$)) +Speed.#1.........: 673.0 MH/s (496.82ms) @ Accel:256 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 23001 (SecureZIP AES-128) +Speed.#1.........: 1758.0 MH/s (378.47ms) @ Accel:512 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 23002 (SecureZIP AES-192) +Speed.#1.........: 1230.8 MH/s (271.66ms) @ Accel:64 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 23003 (SecureZIP AES-256) +Speed.#1.........: 1194.4 MH/s (279.59ms) @ Accel:256 Loops:128 Thr:128 Vec:1 +Hash.Mode........: 23100 (Apple Keychain) +Speed.#1.........: 3313.4 kH/s (291.73ms) @ Accel:256 Loops:249 Thr:256 Vec:1 +Hash.Mode........: 23200 (XMPP SCRAM PBKDF2-SHA1) +Speed.#1.........: 1703.8 kH/s (364.30ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 23300 (Apple iWork) +Speed.#1.........: 1745.7 kH/s (356.65ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 23400 (Bitwarden) +Speed.#1.........: 30777 H/s (434.22ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 23500 (AxCrypt 2 AES-128) +Speed.#1.........: 158.9 kH/s (171.88ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 23600 (AxCrypt 2 AES-256) +Speed.#1.........: 80893 H/s (341.31ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 23700 (RAR3-p (Uncompressed)) +Speed.#1.........: 74708 H/s (545.08ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23800 (RAR3-p (Compressed)) +Speed.#1.........: 67895 H/s (544.92ms) @ Accel:256 Loops:16384 Thr:32 Vec:1 +Hash.Mode........: 23900 (BestCrypt v3 Volume Encryption) +Speed.#1.........: 2515.6 kH/s (479.31ms) @ Accel:512 Loops:1 Thr:32 Vec:1 +Hash.Mode........: 2400 (Cisco-PIX MD5) +Speed.#1.........: 15490.3 MH/s (170.60ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 2410 (Cisco-ASA MD5) +Speed.#1.........: 10861.4 MH/s (123.70ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 24100 (MongoDB ServerKey SCRAM-SHA-1) +Speed.#1.........: 716.0 kH/s (357.72ms) @ Accel:256 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 24200 (MongoDB ServerKey SCRAM-SHA-256) +Speed.#1.........: 204.3 kH/s (424.09ms) @ Accel:16 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 24300 (sha1($salt.sha1($pass.$salt))) +Speed.#1.........: 3925.2 MH/s (338.78ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 24410 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA1 + 3DES/AES)) +Speed.#1.........: 1697.8 kH/s (367.53ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 24420 (PKCS#8 Private Keys (PBKDF2-HMAC-SHA256 + 3DES/AES)) +Speed.#1.........: 1387.8 kH/s (453.25ms) @ Accel:64 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 24500 (Telegram Desktop >= v2.1.14 (PBKDF2-HMAC-SHA512)) +Speed.#1.........: 3426 H/s (390.91ms) @ Accel:1024 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 24600 (SQLCipher) +Speed.#1.........: 56240 H/s (371.30ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 24700 (Stuffit5) +Speed.#1.........: 11559.1 MH/s (228.11ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 24800 (Umbraco HMAC-SHA1) +Speed.#1.........: 2559.5 MH/s (260.13ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 24900 (Dahua Authentication MD5) +Speed.#1.........: 14023.1 MH/s (188.46ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 25000 (SNMPv3 HMAC-MD5-96/HMAC-SHA1-96) +Speed.#1.........: 141.6 kH/s (142.34ms) @ Accel:4 Loops:131072 Thr:512 Vec:1 +Hash.Mode........: 25100 (SNMPv3 HMAC-MD5-96) +Speed.#1.........: 239.7 kH/s (336.35ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 25200 (SNMPv3 HMAC-SHA1-96) +Speed.#1.........: 252.5 kH/s (159.68ms) @ Accel:32 Loops:131072 Thr:128 Vec:1 +Hash.Mode........: 25300 (MS Office 2016 - SheetProtection) +Speed.#1.........: 22744 H/s (294.27ms) @ Accel:8 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 25400 (PDF 1.4 - 1.6 (Acrobat 5 - 8) - edit password) +Speed.#1.........: 27636.7 kH/s (31.03ms) @ Accel:1024 Loops:70 Thr:32 Vec:1 +Hash.Mode........: 25500 (Stargazer Stellar Wallet XLM) +Speed.#1.........: 706.6 kH/s (453.31ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 25600 (bcrypt(md5($pass)) / bcryptmd5) +Speed.#1.........: 76580 H/s (391.13ms) @ Accel:16 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 25700 (MurmurHash) +Speed.#1.........: 10444.8 MH/s (106.99ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 25800 (bcrypt(sha1($pass)) / bcryptsha1) +Speed.#1.........: 76506 H/s (391.25ms) @ Accel:16 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 25900 (KNX IP Secure - Device Authentication Code) +Speed.#1.........: 46825 H/s (433.98ms) @ Accel:32 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 2600 (md5(md5($pass))) +Speed.#1.........: 9075.4 MH/s (146.34ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 26000 (Mozilla key3.db) +Speed.#1.........: 124.7 MH/s (335.81ms) @ Accel:64 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 26100 (Mozilla key4.db) +Speed.#1.........: 293.0 kH/s (443.93ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 26200 (OpenEdge Progress Encode) +Speed.#1.........: 85664.8 kH/s (244.36ms) @ Accel:128 Loops:32 Thr:64 Vec:1 +Hash.Mode........: 26300 (FortiGate256 (FortiOS256)) +Speed.#1.........: 1761.5 MH/s (782.69ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 26401 (AES-128-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 6289.6 MH/s (211.36ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26402 (AES-192-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 5576.7 MH/s (238.32ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 26403 (AES-256-ECB NOKDF (PT = $salt, key = $pass)) +Speed.#1.........: 4491.8 MH/s (295.98ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 26500 (iPhone passcode (UID key + System Keybag)) +Speed.#1.........: 77192 H/s (344.88ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 26700 (SNMPv3 HMAC-SHA224-128) +Speed.#1.........: 236.9 kH/s (340.20ms) @ Accel:8 Loops:131072 Thr:1024 Vec:1 +Hash.Mode........: 26800 (SNMPv3 HMAC-SHA256-192) +Speed.#1.........: 237.2 kH/s (340.06ms) @ Accel:16 Loops:131072 Thr:512 Vec:1 +Hash.Mode........: 26900 (SNMPv3 HMAC-SHA384-256) +Speed.#1.........: 222.0 kH/s (180.02ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Hash.Mode........: 27000 (NetNTLMv1 / NetNTLMv1+ESS (NT)) +Speed.#1.........: 1761.8 kH/s (0.00ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 27100 (NetNTLMv2 (NT)) +Speed.#1.........: 1683.3 kH/s (0.00ms) @ Accel:128 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 27200 (Ruby on Rails Restful Auth (one round, no sitekey)) +Speed.#1.........: 8192.3 MH/s (162.15ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 27300 (SNMPv3 HMAC-SHA512-384) +Speed.#1.........: 222.3 kH/s (179.76ms) @ Accel:8 Loops:262144 Thr:256 Vec:1 +Hash.Mode........: 27400 (VMware VMX (PBKDF2-HMAC-SHA1 + AES-256-CBC)) +Speed.#1.........: 356.9 kH/s (362.78ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 27500 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-128-XTS)) +Speed.#1.........: 10490 H/s (453.26ms) @ Accel:128 Loops:512 Thr:256 Vec:1 +Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS)) +Speed.#1.........: 8091 H/s (454.21ms) @ Accel:16 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 30 (md5(utf16le($pass).$salt)) +Speed.#1.........: 10277.6 MH/s (130.44ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 300 (MySQL4.1/MySQL5) +Speed.#1.........: 5443.2 MH/s (486.40ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 3000 (LM) +Speed.#1.........: 2753.9 MH/s (482.76ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 3100 (Oracle H: Type (Oracle 7+)) +Speed.#1.........: 776.7 MH/s (431.01ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 3200 (bcrypt $2*$, Blowfish (Unix)) +Speed.#1.........: 76838 H/s (311.64ms) @ Accel:1024 Loops:32 Thr:24 Vec:1 +Hash.Mode........: 3500 (md5(md5(md5($pass)))) +Speed.#1.........: 6941.0 MH/s (191.63ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3710 (md5($salt.md5($pass))) +Speed.#1.........: 9072.3 MH/s (146.33ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 3800 (md5($salt.$pass.$salt)) +Speed.#1.........: 10548.9 MH/s (128.10ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 3910 (md5(md5($pass).md5($salt))) +Speed.#1.........: 7589.5 MH/s (175.20ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 40 (md5($salt.utf16le($pass))) +Speed.#1.........: 13008.3 MH/s (101.08ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 400 (phpass) +Speed.#1.........: 12458.6 kH/s (288.98ms) @ Accel:256 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 4010 (md5($salt.md5($salt.$pass))) +Speed.#1.........: 8152.1 MH/s (162.87ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4110 (md5($salt.md5($pass.$salt))) +Speed.#1.........: 8048.4 MH/s (165.16ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4300 (md5(strtoupper(md5($pass)))) +Speed.#1.........: 9744.5 MH/s (136.98ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 4400 (md5(sha1($pass))) +Speed.#1.........: 6861.0 MH/s (384.57ms) @ Accel:128 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 4500 (sha1(sha1($pass))) +Speed.#1.........: 5288.0 MH/s (249.80ms) @ Accel:128 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 4510 (sha1(sha1($pass).$salt)) +Speed.#1.........: 4681.5 MH/s (284.15ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4520 (sha1($salt.sha1($pass))) +Speed.#1.........: 3173.9 MH/s (419.56ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4700 (sha1(md5($pass))) +Speed.#1.........: 7085.4 MH/s (372.23ms) @ Accel:256 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4710 (sha1(md5($pass).$salt)) +Speed.#1.........: 6243.7 MH/s (212.97ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 4800 (iSCSI CHAP authentication, MD5(CHAP)) +Speed.#1.........: 11244.8 MH/s (119.33ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 4900 (sha1($salt.$pass.$salt)) +Speed.#1.........: 6789.5 MH/s (195.97ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 50 (HMAC-MD5 (key = $pass)) +Speed.#1.........: 6509.3 MH/s (204.63ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) +Speed.#1.........: 14735.2 kH/s (444.93ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 5000 (sha1(sha1($salt.$pass.$salt))) +Speed.#1.........: 4081.7 MH/s (325.87ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 501 (Juniper IVE) +Speed.#1.........: 14740.8 kH/s (444.98ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 5100 (Half MD5) +Speed.#1.........: 14423.6 MH/s (182.85ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5200 (Password Safe v3) +Speed.#1.........: 2834.5 kH/s (347.86ms) @ Accel:64 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 5300 (IKE-PSK MD5) +Speed.#1.........: 1764.6 MH/s (377.24ms) @ Accel:256 Loops:128 Thr:256 Vec:1 +Hash.Mode........: 5400 (IKE-PSK SHA1) +Speed.#1.........: 726.9 MH/s (459.39ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 5500 (NetNTLMv1 / NetNTLMv1+ESS) +Speed.#1.........: 15925.2 MH/s (165.57ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5600 (NetNTLMv2) +Speed.#1.........: 2753.9 MH/s (483.05ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 5700 (Cisco-IOS type 4 (SHA256)) +Speed.#1.........: 5272.2 MH/s (252.24ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 5800 (Samsung Android Password/PIN) +Speed.#1.........: 9535.2 kH/s (420.83ms) @ Accel:128 Loops:1023 Thr:512 Vec:1 +Hash.Mode........: 60 (HMAC-MD5 (key = $salt)) +Speed.#1.........: 10917.3 MH/s (122.34ms) @ Accel:256 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 600 (BLAKE2b-512) +Speed.#1.........: 3551.6 MH/s (374.85ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 6000 (RIPEMD-160) +Speed.#1.........: 7829.5 MH/s (337.04ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 6100 (Whirlpool) +Speed.#1.........: 1032.4 MH/s (323.63ms) @ Accel:64 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 6211 (TrueCrypt RIPEMD160 + XTS 512 bit) +Speed.#1.........: 665.9 kH/s (444.74ms) @ Accel:32 Loops:256 Thr:1024 Vec:1 +Hash.Mode........: 6212 (TrueCrypt RIPEMD160 + XTS 1024 bit) +Speed.#1.........: 360.0 kH/s (390.15ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 6213 (TrueCrypt RIPEMD160 + XTS 1536 bit) +Speed.#1.........: 247.5 kH/s (278.46ms) @ Accel:16 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 6221 (TrueCrypt SHA512 + XTS 512 bit) +Speed.#1.........: 912.7 kH/s (312.92ms) @ Accel:8 Loops:999 Thr:512 Vec:1 +Hash.Mode........: 6222 (TrueCrypt SHA512 + XTS 1024 bit) +Speed.#1.........: 431.1 kH/s (282.15ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6223 (TrueCrypt SHA512 + XTS 1536 bit) +Speed.#1.........: 283.8 kH/s (422.43ms) @ Accel:32 Loops:124 Thr:512 Vec:1 +Hash.Mode........: 6231 (TrueCrypt Whirlpool + XTS 512 bit) +Speed.#1.........: 132.4 kH/s (287.65ms) @ Accel:32 Loops:62 Thr:256 Vec:1 +Hash.Mode........: 6232 (TrueCrypt Whirlpool + XTS 1024 bit) +Speed.#1.........: 62532 H/s (213.00ms) @ Accel:2 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6233 (TrueCrypt Whirlpool + XTS 1536 bit) +Speed.#1.........: 41554 H/s (320.95ms) @ Accel:2 Loops:499 Thr:256 Vec:1 +Hash.Mode........: 6241 (TrueCrypt RIPEMD160 + XTS 512 bit + boot-mode) +Speed.#1.........: 1209.5 kH/s (399.99ms) @ Accel:64 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6242 (TrueCrypt RIPEMD160 + XTS 1024 bit + boot-mode) +Speed.#1.........: 629.6 kH/s (351.37ms) @ Accel:32 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6243 (TrueCrypt RIPEMD160 + XTS 1536 bit + boot-mode) +Speed.#1.........: 426.5 kH/s (247.66ms) @ Accel:16 Loops:124 Thr:1024 Vec:1 +Hash.Mode........: 6300 (AIX {smd5}) +Speed.#1.........: 14732.4 kH/s (445.03ms) @ Accel:128 Loops:1000 Thr:1024 Vec:1 +Hash.Mode........: 6400 (AIX {ssha256}) +Speed.#1.........: 21167.1 kH/s (223.50ms) @ Accel:512 Loops:63 Thr:256 Vec:1 +Hash.Mode........: 6500 (AIX {ssha512}) +Speed.#1.........: 11282.3 kH/s (317.80ms) @ Accel:128 Loops:63 Thr:512 Vec:1 +Hash.Mode........: 6600 (1Password, agilekeychain) +Speed.#1.........: 6180.9 kH/s (240.67ms) @ Accel:512 Loops:499 Thr:128 Vec:1 +Hash.Mode........: 6700 (AIX {ssha1}) +Speed.#1.........: 30097.0 kH/s (44.99ms) @ Accel:512 Loops:63 Thr:128 Vec:1 +Hash.Mode........: 6800 (LastPass + LastPass sniffed) +Speed.#1.........: 5301.1 kH/s (423.40ms) @ Accel:32 Loops:499 Thr:1024 Vec:1 +Hash.Mode........: 6900 (GOST R 34.11-94) +Speed.#1.........: 755.3 MH/s (440.47ms) @ Accel:128 Loops:64 Thr:512 Vec:1 +Hash.Mode........: 70 (md5(utf16le($pass))) +Speed.#1.........: 14497.4 MH/s (182.05ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 7000 (FortiGate (FortiOS)) +Speed.#1.........: 7482.4 MH/s (178.14ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 7200 (GRUB 2) +Speed.#1.........: 104.2 kH/s (313.45ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) +Speed.#1.........: 2271.2 MH/s (293.19ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7400 (sha256crypt $5$, SHA256 (Unix)) +Speed.#1.........: 495.1 kH/s (512.75ms) @ Accel:256 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7500 (Kerberos 5, etype 23, AS-REQ Pre-Auth) +Speed.#1.........: 980.7 MH/s (340.92ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 7700 (SAP CODVN B (BCODE)) +Speed.#1.........: 7174.5 MH/s (181.53ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7701 (SAP CODVN B (BCODE) from RFC_READ_TABLE) +Speed.#1.........: 7803.5 MH/s (171.05ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 7800 (SAP CODVN F/G (PASSCODE)) +Speed.#1.........: 1702.1 MH/s (390.42ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7801 (SAP CODVN F/G (PASSCODE) from RFC_READ_TABLE) +Speed.#1.........: 1646.5 MH/s (403.58ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 7900 (Drupal7) +Speed.#1.........: 128.2 kH/s (317.60ms) @ Accel:32 Loops:1024 Thr:256 Vec:1 +Hash.Mode........: 8000 (Sybase ASE) +Speed.#1.........: 837.4 MH/s (398.98ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 +Hash.Mode........: 8100 (Citrix NetScaler (SHA1)) +Speed.#1.........: 9103.1 MH/s (146.10ms) @ Accel:512 Loops:256 Thr:128 Vec:1 +Hash.Mode........: 8200 (1Password, cloudkeychain) +Speed.#1.........: 26100 H/s (315.55ms) @ Accel:8 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 8300 (DNSSEC (NSEC3)) +Speed.#1.........: 3412.3 MH/s (390.14ms) @ Accel:128 Loops:256 Thr:512 Vec:1 +Hash.Mode........: 8400 (WBB3 (Woltlab Burning Board)) +Speed.#1.........: 2251.5 MH/s (295.51ms) @ Accel:128 Loops:128 Thr:512 Vec:1 +Hash.Mode........: 8500 (RACF) +Speed.#1.........: 2566.1 MH/s (503.55ms) @ Accel:1024 Loops:256 Thr:64 Vec:1 +Hash.Mode........: 8600 (Lotus Notes/Domino 5) +Speed.#1.........: 470.5 MH/s (356.13ms) @ Accel:256 Loops:128 Thr:64 Vec:1 +Hash.Mode........: 8700 (Lotus Notes/Domino 6) +Speed.#1.........: 220.9 MH/s (376.57ms) @ Accel:256 Loops:16 Thr:256 Vec:1 +Hash.Mode........: 8800 (Android FDE <= 4.3) +Speed.#1.........: 1711.5 kH/s (362.10ms) @ Accel:512 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 8900 (scrypt) +Speed.#1.........: 566.5 kH/s (2.37ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 900 (MD4) +Speed.#1.........: 17653.7 MH/s (147.96ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 9000 (Password Safe v2) +Speed.#1.........: 1569.9 kH/s (369.71ms) @ Accel:512 Loops:1000 Thr:24 Vec:1 +Hash.Mode........: 9100 (Lotus Notes/Domino 8) +Speed.#1.........: 1401.0 kH/s (355.56ms) @ Accel:512 Loops:512 Thr:128 Vec:1 +Hash.Mode........: 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) +Speed.#1.........: 147.3 kH/s (443.26ms) @ Accel:32 Loops:1024 Thr:512 Vec:1 +Hash.Mode........: 9300 (Cisco-IOS $9$ (scrypt)) +Speed.#1.........: 31517 H/s (2.48ms) @ Accel:80 Loops:1024 Thr:32 Vec:1 +Hash.Mode........: 9400 (MS Office 2007) +Speed.#1.........: 289.7 kH/s (363.46ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9500 (MS Office 2010) +Speed.#1.........: 145.0 kH/s (364.66ms) @ Accel:64 Loops:1024 Thr:1024 Vec:1 +Hash.Mode........: 9600 (MS Office 2013) +Speed.#1.........: 22177 H/s (241.11ms) @ Accel:1024 Loops:512 Thr:1024 Vec:1 +Hash.Mode........: 9700 (MS Office <= 2003 $0/$1, MD5 + RC4) +Speed.#1.........: 877.0 MH/s (381.42ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9710 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #1) +Speed.#1.........: 1351.2 MH/s (46.20ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9720 (MS Office <= 2003 $0/$1, MD5 + RC4, collider #2) +Speed.#1.........: 3323.1 MH/s (201.62ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9800 (MS Office <= 2003 $3/$4, SHA1 + RC4) +Speed.#1.........: 903.5 MH/s (370.21ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9810 (MS Office <= 2003 $3, SHA1 + RC4, collider #1) +Speed.#1.........: 1288.2 MH/s (51.12ms) @ Accel:512 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9820 (MS Office <= 2003 $3, SHA1 + RC4, collider #2) +Speed.#1.........: 3853.3 MH/s (173.13ms) @ Accel:1024 Loops:256 Thr:32 Vec:1 +Hash.Mode........: 9900 (Radmin2) +Speed.#1.........: 12117.9 MH/s (217.79ms) @ Accel:512 Loops:256 Thr:256 Vec:1 +Hash.Mode........: 99999 (Plaintext) +Speed.#1.........: 17401.2 MH/s (151.23ms) @ Accel:512 Loops:256 Thr:256 Vec:1 \ No newline at end of file diff --git a/tools/benchmarking/w-read-benchmark.php b/tools/benchmarking/w-read-benchmark.php new file mode 100644 index 0000000..3892812 --- /dev/null +++ b/tools/benchmarking/w-read-benchmark.php @@ -0,0 +1,73 @@ +\n\n"; + exit(); +} + +//$benchmark = explode("Hashmode: ", file_get_contents($argv[1])); +$benchmark = explode("Hash.Mode........: ", file_get_contents($argv[1])); +$speeds = array(); + +array_shift($benchmark); +while (count($benchmark) > 0) { + $entry = array_shift($benchmark); + // $entry = explode(" - ", $entry); + $entry = explode(" ", $entry); + + //array_shift($entry); + $id = array_shift($entry); + echo "id: " . $id . "\n"; + $entry = explode("\n", implode(" ", $entry)); + + $name = substr(array_shift($entry), 1, -1); + echo "name: " . $name . "\n"; + + + $speed = array(); + foreach($entry as $line) { + echo "[ " . $line . " ]"; + preg_match("/\:\s*?([\d\.]+)\s(.{0,1}H\/s)\s/", $line, $matches); + + print_r($matches); + + if (count($matches) > 0) { + $hashes = $matches[1]; + switch($matches[2]) { + case "H/s": + break; + + case "kH/s": + $hashes *= 1000; + break; + + case "MH/s": + $hashes *= 1000000; + break; + + case "GH/s": + $hashes *= 1000000000; + break; + + default: + echo "Unknown unit: " . $matches[0][2]; + break; + } + + array_push($speed, $hashes); + } + } + + if (count($speed) == 0) { + continue; + } + + $speed = array_sum($speed) / count($speed); + + $speeds[$id] = $speed; +} + +echo json_encode($speeds); + + +?> \ No newline at end of file diff --git a/terraform-selfhost/compute-node/hashcat_wrapper.js b/tools/compute-node/hashcat_wrapper.js similarity index 90% rename from terraform-selfhost/compute-node/hashcat_wrapper.js rename to tools/compute-node/hashcat_wrapper.js index b84346e..e12e3fc 100644 --- a/terraform-selfhost/compute-node/hashcat_wrapper.js +++ b/tools/compute-node/hashcat_wrapper.js @@ -9,7 +9,8 @@ var aws = require('aws-sdk'); const { spawn } = require('child_process'); var apiClientFactory = require('aws-api-gateway-client').default; -var region = process.env.REGION || "us-west-2"; +var region = process.env.REGION; +var primaryRegion = process.env.USERDATAREGION; var keyspace = process.env.KEYSPACE || 1; var apigateway = process.env.APIGATEWAY; var manifestpath = process.env.ManifestPath; @@ -46,7 +47,7 @@ var getCredentials = function() { accessKey: aws.config.credentials.accessKeyId, secretKey: aws.config.credentials.secretAccessKey, sessionToken: aws.config.credentials.sessionToken, - region: "us-west-2" + region: primaryRegion }); setTimeout(getCredentials, 600); @@ -61,10 +62,12 @@ function getHashcatParams(manifest) { var params = [ "--quiet", "-O", - "--remove", - "--potfile-path=/potfiles/" + instance_id + ".potfile", "-o", "/potfiles/cracked_hashes-" + instance_id + ".txt", + "--outfile-check-dir", + "/potfiles/", + "--outfile-check-timer", + "30", "-w", "4", "-m", @@ -131,6 +134,7 @@ var readOutput = function(output) { estimatedEndTime: status.estimated_stop, hashRate: hashrate, progress: ((status.progress[0] / status.progress[1]) * 100).toFixed(2), + hashes: status.recovered_hashes[1], recoveredHashes: status.recovered_hashes[0], recoveredPercentage: ((status.recovered_hashes[0] / status.recovered_hashes[1]) * 100).toFixed(2), rejectedPercentage: ((status.rejected / status.progress[0]) * 100).toFixed(2), @@ -284,22 +288,21 @@ var sendFinished = function (completed) { return failure(false); } - var recoveredHashes; - if (fs.existsSync("/potfiles/cracked_hashes-" + instance_id + ".txt")) { - try { - recoveredHashes = fs.readFileSync("/potfiles/cracked_hashes-" + instance_id + ".txt", "ascii").trim().split("\n").length || 0; - } catch (e) { - console.log("Unable to read potfile:", e); - console.log("Sending a recoveredHashes value of 0"); - recoveredHashes = 0; - } - } else { - console.log("Hashcat didn't create a potfile. No hashes were recovered."); - console.log("Sending a recoveredHashes value of 0"); - recoveredHashes = 0; - } + const recoveredHashes = [ + ...new Set(fs.readdirSync("/potfiles") + .filter(f => /^cracked_hashes-/.test(f)) + .reduce((a, c) => + a.concat(fs.readFileSync(`/potfiles/${c}`, "ascii").trim().split("\n")), + [] + ) + ) + ]; + + console.log(`Got [${recoveredHashes.length}] hashes from all files.`) + + fs.writeFileSync('/potfiles/all_cracked_hashes.txt', recoveredHashes.join("\n")); - apiClient.invokeApi(nodeParams, nodeTemplate, "POST", {}, {completed: completed, recoveredHashes: recoveredHashes}).then(function(result) { + apiClient.invokeApi(nodeParams, nodeTemplate, "POST", {}, { completed, recoveredHashes: recoveredHashes.length }).then(function(result) { console.log("Node marked as complete."); success(true); }).catch(function(err) { diff --git a/terraform-selfhost/compute-node/maskprocessor.js b/tools/compute-node/maskprocessor.js similarity index 100% rename from terraform-selfhost/compute-node/maskprocessor.js rename to tools/compute-node/maskprocessor.js diff --git a/tools/compute-node/package-lock.json b/tools/compute-node/package-lock.json new file mode 100644 index 0000000..ccee26d --- /dev/null +++ b/tools/compute-node/package-lock.json @@ -0,0 +1,405 @@ +{ + "name": "compute-node", + "version": "2.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "compute-node", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "aws-api-gateway-client": "^0.3.7", + "aws-sdk": "^2.382.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/aws-api-gateway-client": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/aws-api-gateway-client/-/aws-api-gateway-client-0.3.7.tgz", + "integrity": "sha512-pagIdx+N2ZdCGC0GZB53QCz9sy37lbavfn3sn0mMZQqoMCn5gNG4iqpcVOt7Z5wtA+ZmzyZoI+oGOuYqUKLYBw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "axios": "^0.21.1", + "axios-retry": "^3.1.9", + "crypto-js": "^4.0.0", + "url": "^0.11.0", + "url-template": "^2.0.8" + } + }, + "node_modules/aws-sdk": { + "version": "2.1043.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1043.0.tgz", + "integrity": "sha512-WysMTSLfi8ZCj6QAAitJkxObxOzGLhcu6FxoKHiEnrefvfQtSvwqUq7BbT/pIfijnF9dE/7e9XwjW8Dz/hqF4Q==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axios-retry": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz", + "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==", + "dependencies": { + "is-retry-allowed": "^1.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "aws-api-gateway-client": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/aws-api-gateway-client/-/aws-api-gateway-client-0.3.7.tgz", + "integrity": "sha512-pagIdx+N2ZdCGC0GZB53QCz9sy37lbavfn3sn0mMZQqoMCn5gNG4iqpcVOt7Z5wtA+ZmzyZoI+oGOuYqUKLYBw==", + "requires": { + "@babel/runtime": "^7.12.5", + "axios": "^0.21.1", + "axios-retry": "^3.1.9", + "crypto-js": "^4.0.0", + "url": "^0.11.0", + "url-template": "^2.0.8" + } + }, + "aws-sdk": { + "version": "2.1043.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1043.0.tgz", + "integrity": "sha512-WysMTSLfi8ZCj6QAAitJkxObxOzGLhcu6FxoKHiEnrefvfQtSvwqUq7BbT/pIfijnF9dE/7e9XwjW8Dz/hqF4Q==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + } + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "axios-retry": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz", + "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==", + "requires": { + "is-retry-allowed": "^1.1.0" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/terraform-selfhost/compute-node/package.json b/tools/compute-node/package.json similarity index 83% rename from terraform-selfhost/compute-node/package.json rename to tools/compute-node/package.json index 47f78ba..b393f03 100644 --- a/terraform-selfhost/compute-node/package.json +++ b/tools/compute-node/package.json @@ -4,10 +4,9 @@ "description": "NPK Compute Node Wrapper for HashCat", "main": "hashcat_wrapper.js", "dependencies": { - "aws-api-gateway-client": "^0.2.16", + "aws-api-gateway-client": "^0.3.7", "aws-sdk": "^2.382.0" }, - "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" },