diff --git a/.gitignore b/.gitignore index dc3380c..88c90e4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,17 @@ Cargo.lock *.so *.so.* +#generated proxy +hello-rust/bin/app +hello-rust/**/*_u.c +hello-rust/**/*_u.h +hello-rust/**/*_t.c +hello-rust/**/*_t.h +safetrace/**/*_u.c +safetrace/**/*_u.h +safetrace/**/*_t.c +safetrace/**/*_t.h + **/target *.wasm @@ -43,9 +54,6 @@ Enclave_t.h bin/ lib/ -# enigma-types -enigma-types.h - # Prerequisites *.d diff --git a/client/index.js b/client/index.js new file mode 100644 index 0000000..8ef8d51 --- /dev/null +++ b/client/index.js @@ -0,0 +1,122 @@ +const axios = require('axios'); +const forge = require('node-forge'); +const EthCrypto = require('eth-crypto'); +const jaysonBrowserClient = require('jayson/lib/client/browser'); +const enigma = require('enigma-js/lib/enigma-js.node'); +const web3utils = require('web3-utils'); + + +const JSON_RPC_Server='http://localhost:8080'; + +const callServer = function(request, callback) { + let config = { + headers: { + 'Content-Type': 'application/json', + 'credentials': 'include', + }, + }; + axios.post(JSON_RPC_Server, JSON.parse(request), config).then((response) => { + if ('error' in response.data) { + callback(response.data.error, null); + } else { + let text = JSON.stringify(response.data.result); + callback(null, text); + } + }).catch(function(err) { + callback({code: -32000, message: err.message}, null); + }); +}; + +const client = jaysonBrowserClient(callServer, {}); + +function getClientKeys(seed='') { + if (seed === '') { + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + for (let i = 0; i < 9; i++) { + seed += characters.charAt(Math.floor(Math.random() * characters.length)); + } + } + let random = forge.random.createInstance(); + + random.seedFileSync = function(needed) { + return forge.util.fillString(seed, needed); + }; + const privateKey = forge.util.bytesToHex(random.getBytes(32)); + const publicKey = EthCrypto.publicKeyByPrivateKey(privateKey) + + return {privateKey, publicKey}; +} + +async function add_data(userId, data){ + + let {publicKey, privateKey} = getClientKeys(); + + console.log(publicKey) + + try { + const getWorkerEncryptionKeyResult = await new Promise((resolve, reject) => { + client.request('newTaskEncryptionKey', {userPubKey: publicKey}, + (err, response) => { + if (err) { + reject(err); + return; + } + resolve(response); + }); + }); + + const {result, id} = getWorkerEncryptionKeyResult; + const {taskPubKey, sig} = result; + // ToDo: verify signature + + // Generate derived key from worker's encryption key and user's private key + const derivedKey = enigma.utils.getDerivedKey(taskPubKey, privateKey); + // Encrypt function and ABI-encoded args + const encryptedUserId = enigma.utils.encryptMessage(derivedKey, userId); + const encryptedData = enigma.utils.encryptMessage(derivedKey, data); + const msg = web3utils.soliditySha3( + {t: 'bytes', v: encryptedUserId}, + {t: 'bytes', v: encryptedData}, + ); + + // const a = getClientKeys(); + + // console.log(a.publicKey); + + const addPersonalDataResult = await new Promise((resolve, reject) => { + client.request('addPersonalData', { + encryptedUserId: encryptedUserId, + encryptedData: encryptedData, + userPubKey: publicKey}, + (err, response) => { + if (err) { + reject(err); + return; + } + resolve(response); + }); + }); + + const {addPersonalData} = addPersonalDataResult; + + if(addPersonalData.status == 0) { + console.log('Personal data added successfully to the enclave.'); + } else { + console.log('Something went wrong. Time to debug...') + } + + + } catch(err) { + console.log(err); + // Or Throw an error + } + +} + +add_data('myUserId', 'myDataString') + + + +let seed = ''; + + diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..a66571a --- /dev/null +++ b/client/package.json @@ -0,0 +1,19 @@ +{ + "name": "client", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^0.19.2", + "enigma-js": "^0.3.0", + "eth-crypto": "^1.5.2", + "jayson": "^3.2.0", + "node-forge": "^0.9.1", + "web3-utils": "^1.2.6" + } +} diff --git a/client/yarn.lock b/client/yarn.lock new file mode 100644 index 0000000..aff72fa --- /dev/null +++ b/client/yarn.lock @@ -0,0 +1,3018 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@truffle/blockchain-utils@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.11.tgz#9886f4cb7a9f20deded4451ac78f8567ae5c0d75" + integrity sha512-9MyQ/20M96clhIcC7fVFIckGSB8qMsmcdU6iYt98HXJ9GOLNKsCaJFz1OVsJncVreYwTUhoEXTrVBc8zrmPDJQ== + +"@truffle/contract-schema@^3.0.14": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.0.23.tgz#5d869d9b10be23034c07c7dbf3c48542eabe63ef" + integrity sha512-N4CaTMcZhOC44Vl6k2r/eua+ojUswl6mNlkVTVYMvWjfKa8GHKKClsZfkGO72aBrBzoTFsM6D75LvQIIRBy3fg== + dependencies: + ajv "^6.10.0" + crypto-js "^3.1.9-1" + debug "^4.1.0" + +"@truffle/error@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.6.tgz#75d499845b4b3a40537889e7d04c663afcaee85d" + integrity sha512-QUM9ZWiwlXGixFGpV18g5I6vua6/r+ZV9W/5DQA5go9A3eZUNPHPaTKMIQPJLYn6+ZV5jg5H28zCHq56LHF3yA== + +"@types/bn.js@4.11.6", "@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/connect@^3.4.32": + version "3.4.33" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" + integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.16.9": + version "4.17.3" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.3.tgz#dc8068ee3e354d7fba69feb86b3dfeee49b10f09" + integrity sha512-sHEsvEzjqN+zLbqP+8OXTipc10yH1QLR+hnr5uw29gi9AhCAAAdri8ClNV7iMdrJrIzXIQtlkPvq8tJGhj3QJQ== + dependencies: + "@types/node" "*" + "@types/range-parser" "*" + +"@types/lodash@^4.14.139": + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + +"@types/node@*": + version "13.9.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" + integrity sha512-hkzMMD3xu6BrJpGVLeQ3htQQNAcOrJjX7WFmtK8zWQpz2UJf13LCFF2ALA7c9OVdvc2vQJeDdjfR35M0sBCxvw== + +"@types/node@^10.3.2": + version "10.17.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.17.tgz#7a183163a9e6ff720d86502db23ba4aade5999b8" + integrity sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q== + +"@types/node@^12.7.7": + version "12.12.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" + integrity sha512-44/reuCrwiQEsXud3I5X3sqI5jIXAmHB5xoiyKUw965olNHF3IWKjBLKK3F9LOSUZmK+oDt8jmyO637iX+hMgA== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +JSONStream@^1.3.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +ajv@^6.10.0, ajv@^6.5.5: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +any-promise@1.3.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +axios@0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +babel-runtime@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= + dependencies: + safe-buffer "^5.0.1" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +body-parser@1.19.0, body-parser@^1.16.0, body-parser@^1.18.3: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sha3@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/browserify-sha3/-/browserify-sha3-0.0.4.tgz#086c47b8c82316c9d47022c26185954576dd8e26" + integrity sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY= + dependencies: + js-sha3 "^0.6.1" + safe-buffer "^5.1.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.5, buffer@^5.1.0, buffer@^5.2.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" + integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.2: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + +connect@^3.6.6: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^3.1.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-file-webpack@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/create-file-webpack/-/create-file-webpack-1.0.2.tgz#c206474fe15a6aab12e2a278a7798d244befff0b" + integrity sha512-+J6kQTE+Wcobc6gHP8E2zmoeIC+J+p6IXqjFrzoxCl1VYlimWoincPUABAhODuXAJGrZcNZ/Up0PTqq1ISiwvA== + dependencies: + path "^0.12.7" + write "^1.0.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" + integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + +drbg.js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" + integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= + dependencies: + browserify-aes "^1.0.6" + create-hash "^1.1.2" + create-hmac "^1.1.4" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +eccrypto@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/eccrypto/-/eccrypto-1.1.3.tgz#010cb4e9d239ce9752b82c0ac6d8af207fffaf3e" + integrity sha512-Xtyj039Xp2NDZwoe9IcD7pT1EwM4DILdxPCN2H7Rk1wgJNtTkFpk+cpX1QpuHTMaIhkatOBlGGKzGw/DUCDdqg== + dependencies: + acorn "7.1.0" + elliptic "6.5.1" + es6-promise "4.2.8" + nan "2.14.0" + optionalDependencies: + secp256k1 "3.7.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +elliptic@6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" + integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8= + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + inherits "^2.0.1" + +elliptic@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + integrity sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8= + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +elliptic@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +elliptic@6.5.2, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enigma-js@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/enigma-js/-/enigma-js-0.3.0.tgz#cfedc1517c73b83b1ffbca2f98b61c85bc02f98e" + integrity sha512-Qg0slG2ZX60aZ/eqyDkIuq8XrlMq+NVZY8rOd/wvsUoYoUzWCf+ApAZtY4A62HFR52CH0z2JqWx+bs51tWkdjg== + dependencies: + any-promise "^1.3.0" + axios "0.18.1" + body-parser "^1.18.3" + buffer "^5.1.0" + connect "^3.6.6" + core-js "^3.1.4" + create-file-webpack "^1.0.2" + elliptic "6.4.0" + eth-crypto "^1.2.2" + ethereumjs-abi "^0.6.5" + ethereumjs-util "^6.0.0" + eventemitter3 "^3.1.0" + filereader "^0.10.3" + jayson "^3.0.1" + jsbi "^2.0.5" + net "^1.0.2" + node-fetch "^2.3.0" + node-forge "^0.7.6" + openzeppelin-solidity "2.1" + regenerator-runtime "^0.13.3" + retry "^0.12.0" + rlp "2.1.0" + source-map-support "^0.5.9" + tls "0.0.1" + truffle-contract "^4.0.0" + uuid "^3.3.2" + web3-utils "1.0.0-beta.37" + webpack-node-externals "^1.7.2" + whatwg-fetch "^3.0.0" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@4.2.8, es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-crypto@^1.2.2, eth-crypto@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/eth-crypto/-/eth-crypto-1.5.2.tgz#bf9f7aece69d68752097498310c921621fbe5726" + integrity sha512-xhu7rt3CdNKSQ5VcqiFwfp50YVtc1+VPiqYEfMa8Omx9rGn5QHdIjImSoEnlej3VbfHv25Kvpu6A5oPoSI6iUA== + dependencies: + "@types/bn.js" "4.11.6" + babel-runtime "6.26.0" + eccrypto "1.1.3" + eth-lib "0.2.8" + ethereumjs-tx "2.1.2" + ethereumjs-util "6.2.0" + ethers "4.0.44" + secp256k1 "3.8.0" + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.27.tgz#f0b0fd144f865d2d6bf8257a40004f2e75ca1dd6" + integrity sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + keccakjs "^0.2.1" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-lib@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" + integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.6.tgz#9cdebb3ec20de96ec4a434c6bad6ea5a513037aa" + integrity sha512-dE9CGNzgOOsdh7msZirvv8qjHtnHpvBlKe2647kM8v+yeF71IRso55jpojemvHV+jMjr48irPWxMRaHuOWzAFA== + dependencies: + js-sha3 "^0.8.0" + +ethereumjs-abi@^0.6.5: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-common@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" + integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== + +ethereumjs-tx@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@6.2.0, ethereumjs-util@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" + integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + ethjs-util "0.1.6" + keccak "^2.0.0" + rlp "^2.2.3" + secp256k1 "^3.0.1" + +ethers@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066" + integrity sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog== + dependencies: + "@types/node" "^10.3.2" + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.3.3" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.3" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@4.0.44: + version "4.0.44" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.44.tgz#f2608cbc0b4d099b7e10a01c0efc3a1037013b4e" + integrity sha512-kCkMPkpYjBkxzqjcuYUfDY7VHDbf5EXnfRPUOazdqdf59SvXaT+w5lgauxLlk1UjxnAiNfeNS87rkIXnsTaM7Q== + dependencies: + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.5.2" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^4.0.0-beta.1, ethers@^4.0.32: + version "4.0.46" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.46.tgz#13cd3ed099487f43ece00194b89a8a8781f71507" + integrity sha512-/dPMzzpInhtiip4hKFvsDiJKeRk64IhyA+Po7CtNXneQFSOCYXg8eBFt+jXbxUQyApgWnWOtYxWdfn9+CvvxDA== + dependencies: + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.5.2" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@3.1.2, eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filereader@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/filereader/-/filereader-0.10.3.tgz#c747d4a2cd8f61e5418a7c07fe1257a43f0acdb1" + integrity sha1-x0fUos2PYeVBinwH/hJXpD8KzbE= + +finalhandler@1.1.2, finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jayson@^3.0.1, jayson@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.2.0.tgz#df6d8139cd9f6ee2f56c8c2deaee448da7eccf1b" + integrity sha512-DZQnwA57GcStw4soSYB2VntWXFfoWvmSarlaWePDYOWhjxT72PBM4atEBomaTaS1uqk3jFC9UO9AyWjlujo3xw== + dependencies: + "@types/connect" "^3.4.32" + "@types/express-serve-static-core" "^4.16.9" + "@types/lodash" "^4.14.139" + "@types/node" "^12.7.7" + JSONStream "^1.3.1" + commander "^2.12.2" + es6-promisify "^5.0.0" + eyes "^0.1.8" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + uuid "^3.2.1" + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.6.1.tgz#5b89f77a7477679877f58c4a075240934b1f95c0" + integrity sha1-W4n3enR3Z5h39YxKB1JAk0sflcA= + +js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +jsbi@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-2.0.5.tgz#82589011da87dc59b4b549d94dcef51a9155f6fe" + integrity sha512-TzO/62Hxeb26QMb4IGlI/5X+QLr9Uqp1FPkwp2+KOICW+Q+vSuFj61c8pkT6wAns4WcK56X7CmSHhJeDGWOqxQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +keccak@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-2.1.0.tgz#734ea53f2edcfd0f42cdb8d5f4c358fef052752b" + integrity sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q== + dependencies: + bindings "^1.5.0" + inherits "^2.0.4" + nan "^2.14.0" + safe-buffer "^5.2.0" + +keccakjs@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/keccakjs/-/keccakjs-0.2.3.tgz#5e4e969ce39689a3861f445d7752ee3477f9fe72" + integrity sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg== + dependencies: + browserify-sha3 "^0.0.4" + sha3 "^1.2.2" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lodash@^4.17.13, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + dependencies: + minimist "^1.2.5" + +mock-fs@^4.1.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.11.0.tgz#0828107e4b843a6ba855ecebfe3c6e073b69db92" + integrity sha512-Yp4o3/ZA15wsXqJTT+R+9w2AYIkD1i80Lds47wDbuUhOvQvm+O2EfjFZSz0pMgZZSPHRhGxgcd2+GL4+jZMtdw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + +nan@2.14.0, nan@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +net@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/net/-/net-1.0.2.tgz#d1757ec9a7fb2371d83cf4755ce3e27e10829388" + integrity sha1-0XV+yaf7I3HYPPR1XOPifhCCk4g= + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +node-fetch@^2.3.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-forge@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac" + integrity sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw== + +node-forge@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.1.tgz#775368e6846558ab6676858a4d8c6e8d16c677b5" + integrity sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +oboe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +openzeppelin-solidity@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/openzeppelin-solidity/-/openzeppelin-solidity-2.1.3.tgz#34aea40c2d05665f0dd6bc021e48516cf25b1ef6" + integrity sha512-Zz595xw6w4ZrNU3JJJTlPd8bHFbHv5OkJlkqsM2i+NBs6CzImoHI3dZ+nmhkfR+p52cGXKmayAGbnfdCum1SMg== + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path@^0.12.7: + version "0.12.7" + resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= + dependencies: + process "^0.11.1" + util "^0.10.3" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +randomhex@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585" + integrity sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU= + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + 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" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.3: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +request@^2.79.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.1.0.tgz#e4f9886d5a982174f314543831e36e1a658460f9" + integrity sha512-93U7IKH5j7nmXFVg19MeNBGzQW5uXW1pmCuKY8veeKIhYTE32C2d0mOegfiIAfXcHOKJjjPlJisn8iHDF5AezA== + dependencies: + safe-buffer "^5.1.1" + +rlp@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.4.tgz#d6b0e1659e9285fc509a5d169a9bd06f704951c1" + integrity sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw== + dependencies: + bn.js "^4.11.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" + integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q= + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scryptsy@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" + integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== + +secp256k1@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1" + integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.4.1" + nan "^2.14.0" + safe-buffer "^5.1.2" + +secp256k1@3.8.0, secp256k1@^3.0.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.5.2" + nan "^2.14.0" + safe-buffer "^5.1.2" + +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= + dependencies: + commander "~2.8.1" + +semver@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha3@^1.2.2: + version "1.2.6" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.6.tgz#102aa3e47dc793e2357902c3cce8760822f9e905" + integrity sha512-KgLGmJGrmNB4JWVsAV11Yk6KbvsAiygWJc7t5IebWva/0NukNrjJqhtKhzy3Eiv2AKuGvhZZt7dt1mDo7HkoiQ== + dependencies: + nan "2.13.2" + +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +source-map-support@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +swarm-js@0.1.39: + version "0.1.39" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" + integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + decompress "^4.0.0" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request-promise "^0.1.2" + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +"through@>=2.2.7 <3", through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tls@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tls/-/tls-0.0.1.tgz#0ab2bf5968d71df2f8c0e1515d24a2240b98aac8" + integrity sha1-CrK/WWjXHfL4wOFRXSSiJAuYqsg= + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +truffle-contract@^4.0.0: + version "4.0.31" + resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-4.0.31.tgz#e43b7f648e2db352c857d1202d710029b107b68d" + integrity sha512-u3q+p1wiX5C2GpnluGx/d2iaJk7bcWshk2/TohiJyA2iQiTfkS7M4n9D9tY3JqpXR8PmD/TrA69RylO0RhITFA== + dependencies: + "@truffle/blockchain-utils" "^0.0.11" + "@truffle/contract-schema" "^3.0.14" + "@truffle/error" "^0.0.6" + bignumber.js "^7.2.1" + ethers "^4.0.0-beta.1" + truffle-interface-adapter "^0.2.5" + web3 "1.2.1" + web3-core-promievent "1.2.1" + web3-eth-abi "1.2.1" + web3-utils "1.2.1" + +truffle-interface-adapter@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/truffle-interface-adapter/-/truffle-interface-adapter-0.2.5.tgz#aa0bee635517b4a8e06adcdc99eacb993e68c243" + integrity sha512-EL39OpP8FcZ99ne1Rno3jImfb92Nectd4iVsZzoEUCBfbwHe7sr0k+i45guoruSoP8nMUE81Mov2s8I5pi6d9Q== + dependencies: + bn.js "^4.11.8" + ethers "^4.0.32" + lodash "^4.17.13" + web3 "1.2.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbzip2-stream@^1.0.9: + version "1.3.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a" + integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +underscore@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +utf8@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" + integrity sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g= + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.2.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +web3-bzz@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.1.tgz#c3bd1e8f0c02a13cd6d4e3c3e9e1713f144f6f0d" + integrity sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw== + dependencies: + got "9.6.0" + swarm-js "0.1.39" + underscore "1.9.1" + +web3-core-helpers@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz#f5f32d71c60a4a3bd14786118e633ce7ca6d5d0d" + integrity sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.1" + web3-utils "1.2.1" + +web3-core-method@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.1.tgz#9df1bafa2cd8be9d9937e01c6a47fc768d15d90a" + integrity sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.1" + web3-core-promievent "1.2.1" + web3-core-subscriptions "1.2.1" + web3-utils "1.2.1" + +web3-core-promievent@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz#003e8a3eb82fb27b6164a6d5b9cad04acf733838" + integrity sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw== + dependencies: + any-promise "1.3.0" + eventemitter3 "3.1.2" + +web3-core-requestmanager@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz#fa2e2206c3d738db38db7c8fe9c107006f5c6e3d" + integrity sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.1" + web3-providers-http "1.2.1" + web3-providers-ipc "1.2.1" + web3-providers-ws "1.2.1" + +web3-core-subscriptions@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz#8c2368a839d4eec1c01a4b5650bbeb82d0e4a099" + integrity sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g== + dependencies: + eventemitter3 "3.1.2" + underscore "1.9.1" + web3-core-helpers "1.2.1" + +web3-core@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.1.tgz#7278b58fb6495065e73a77efbbce781a7fddf1a9" + integrity sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg== + dependencies: + web3-core-helpers "1.2.1" + web3-core-method "1.2.1" + web3-core-requestmanager "1.2.1" + web3-utils "1.2.1" + +web3-eth-abi@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz#9b915b1c9ebf82f70cca631147035d5419064689" + integrity sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g== + dependencies: + ethers "4.0.0-beta.3" + underscore "1.9.1" + web3-utils "1.2.1" + +web3-eth-accounts@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz#2741a8ef337a7219d57959ac8bd118b9d68d63cf" + integrity sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ== + dependencies: + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "0.2.7" + scryptsy "2.1.0" + semver "6.2.0" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.1" + web3-core-helpers "1.2.1" + web3-core-method "1.2.1" + web3-utils "1.2.1" + +web3-eth-contract@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz#3542424f3d341386fd9ff65e78060b85ac0ea8c4" + integrity sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g== + dependencies: + underscore "1.9.1" + web3-core "1.2.1" + web3-core-helpers "1.2.1" + web3-core-method "1.2.1" + web3-core-promievent "1.2.1" + web3-core-subscriptions "1.2.1" + web3-eth-abi "1.2.1" + web3-utils "1.2.1" + +web3-eth-ens@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz#a0e52eee68c42a8b9865ceb04e5fb022c2d971d5" + integrity sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.1" + web3-core-helpers "1.2.1" + web3-core-promievent "1.2.1" + web3-eth-abi "1.2.1" + web3-eth-contract "1.2.1" + web3-utils "1.2.1" + +web3-eth-iban@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz#2c3801718946bea24e9296993a975c80b5acf880" + integrity sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ== + dependencies: + bn.js "4.11.8" + web3-utils "1.2.1" + +web3-eth-personal@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz#244e9911b7b482dc17c02f23a061a627c6e47faf" + integrity sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg== + dependencies: + web3-core "1.2.1" + web3-core-helpers "1.2.1" + web3-core-method "1.2.1" + web3-net "1.2.1" + web3-utils "1.2.1" + +web3-eth@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.1.tgz#b9989e2557c73a9e8ffdc107c6dafbe72c79c1b0" + integrity sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA== + dependencies: + underscore "1.9.1" + web3-core "1.2.1" + web3-core-helpers "1.2.1" + web3-core-method "1.2.1" + web3-core-subscriptions "1.2.1" + web3-eth-abi "1.2.1" + web3-eth-accounts "1.2.1" + web3-eth-contract "1.2.1" + web3-eth-ens "1.2.1" + web3-eth-iban "1.2.1" + web3-eth-personal "1.2.1" + web3-net "1.2.1" + web3-utils "1.2.1" + +web3-net@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.1.tgz#edd249503315dd5ab4fa00220f6509d95bb7ab10" + integrity sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw== + dependencies: + web3-core "1.2.1" + web3-core-method "1.2.1" + web3-utils "1.2.1" + +web3-providers-http@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.1.tgz#c93ea003a42e7b894556f7e19dd3540f947f5013" + integrity sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ== + dependencies: + web3-core-helpers "1.2.1" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz#017bfc687a8fc5398df2241eb98f135e3edd672c" + integrity sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.1" + +web3-providers-ws@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz#2d941eaf3d5a8caa3214eff8dc16d96252b842cb" + integrity sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.1" + websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" + +web3-shh@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.1.tgz#4460e3c1e07faf73ddec24ccd00da46f89152b0c" + integrity sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA== + dependencies: + web3-core "1.2.1" + web3-core-method "1.2.1" + web3-core-subscriptions "1.2.1" + web3-net "1.2.1" + +web3-utils@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.37.tgz#ab868a90fe5e649337e38bdaf72133fcbf4d414d" + integrity sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ== + dependencies: + bn.js "4.11.6" + eth-lib "0.1.27" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randomhex "0.1.5" + underscore "1.8.3" + utf8 "2.1.1" + +web3-utils@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.1.tgz#21466e38291551de0ab34558de21512ac4274534" + integrity sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randomhex "0.1.5" + underscore "1.9.1" + utf8 "3.0.0" + +web3-utils@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.6.tgz#b9a25432da00976457fcc1094c4af8ac6d486db9" + integrity sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.1.tgz#5d8158bcca47838ab8c2b784a2dee4c3ceb4179b" + integrity sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw== + dependencies: + web3-bzz "1.2.1" + web3-core "1.2.1" + web3-eth "1.2.1" + web3-eth-personal "1.2.1" + web3-net "1.2.1" + web3-shh "1.2.1" + web3-utils "1.2.1" + +webpack-node-externals@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" + integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== + +"websocket@github:web3-js/WebSocket-Node#polyfill/globalThis": + version "1.0.29" + resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/905deb4812572b344f5801f8c9ce8bb02799d82e" + dependencies: + debug "^2.2.0" + es5-ext "^0.10.50" + nan "^2.14.0" + typedarray-to-buffer "^3.1.5" + yaeti "^0.0.6" + +whatwg-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xhr-request-promise@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz#343c44d1ee7726b8648069682d0f840c83b4261d" + integrity sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0= + dependencies: + xhr-request "^1.0.1" + +xhr-request@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" + integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/enclave/enigma-types/Cargo.toml b/enclave/enigma-types/Cargo.toml deleted file mode 100644 index 64b95fd..0000000 --- a/enclave/enigma-types/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -# I use package renaming to import 2 libraries with the same name but from different sources (1 for SGX and 1 for regular std) -# Then in the code you can rename them back (under a cfg condition) to the same name to use abstractly. - -[package] -name = "enigma-types" -version = "0.3.0" -authors = ["Elichai Turkel "] -edition = "2018" -categories = ["no-std"] - -[dependencies] -rustc-hex = { version = "2.0.1", default-features = false } -arrayvec = { version = "0.4.10", default-features = false } -serde_sgx = { package = "serde", git = "https://github.com/mesalock-linux/serde-sgx.git", rev = "sgx_1.0.9", optional = true } -serde_std = { package = "serde", version = "1.0", default-features = false, optional = true } - -[build-dependencies] -cbindgen = "0.8" - -[features] -default = ["serde_std/derive"] # This library is no_std with the default features. -std = ["serde_std/std", "serde_std/derive"] -alloc = ["serde_std/alloc", "serde_std/derive"] -sgx = ["serde_sgx", "serde_sgx/derive"] diff --git a/enclave/enigma-types/build.rs b/enclave/enigma-types/build.rs deleted file mode 100644 index 3bf73f8..0000000 --- a/enclave/enigma-types/build.rs +++ /dev/null @@ -1,42 +0,0 @@ -// client/build.rs - -use cbindgen::Language; -use std::{env, path::PathBuf}; - -fn main() { - let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); - let package_name = env::var("CARGO_PKG_NAME").unwrap(); - let output_file = target_dir().join(format!("{}.h", package_name)).display().to_string(); - - cbindgen::Builder::new() - .with_no_includes() - .with_sys_include("stdbool.h") - .with_language(Language::C) - .include_item("EnclaveReturn") - .include_item("ResultStatus") - .include_item("ExecuteResult") - .include_item("Hash256") - .include_item("StateKey") - .include_item("ContractAddress") - .include_item("MsgID") - .include_item("PubKey") - .include_item("RawPointer") - .with_crate(&crate_dir) - .generate() - .expect("Unable to generate bindings") - .write_to_file(&output_file); -} - -/// Find the location of the `target/` directory. Note that this may be -/// overridden by `cmake`, so we also need to check the `CARGO_TARGET_DIR` -/// variable. -fn target_dir() -> PathBuf { - let mut target = PathBuf::from(env::var("OUT_DIR").unwrap()); - target.pop(); - target.pop(); - target.pop(); - target.pop(); - target.pop(); - - target -} \ No newline at end of file diff --git a/enclave/hello-rust/app/Enclave_u.c b/enclave/hello-rust/app/Enclave_u.c deleted file mode 100644 index 773328f..0000000 --- a/enclave/hello-rust/app/Enclave_u.c +++ /dev/null @@ -1,1018 +0,0 @@ -#include "Enclave_u.h" -#include - -typedef struct ms_say_something_t { - sgx_status_t ms_retval; - const uint8_t* ms_some_string; - size_t ms_len; -} ms_say_something_t; - -typedef struct ms_t_global_init_ecall_t { - uint64_t ms_id; - const uint8_t* ms_path; - size_t ms_len; -} ms_t_global_init_ecall_t; - -typedef struct ms_u_thread_set_event_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_tcs; -} ms_u_thread_set_event_ocall_t; - -typedef struct ms_u_thread_wait_event_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_tcs; - const struct timespec* ms_timeout; -} ms_u_thread_wait_event_ocall_t; - -typedef struct ms_u_thread_set_multiple_events_ocall_t { - int ms_retval; - int* ms_error; - const void** ms_tcss; - int ms_total; -} ms_u_thread_set_multiple_events_ocall_t; - -typedef struct ms_u_thread_setwait_events_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_waiter_tcs; - const void* ms_self_tcs; - const struct timespec* ms_timeout; -} ms_u_thread_setwait_events_ocall_t; - -typedef struct ms_u_clock_gettime_ocall_t { - int ms_retval; - int* ms_error; - int ms_clk_id; - struct timespec* ms_tp; -} ms_u_clock_gettime_ocall_t; - -typedef struct ms_u_read_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - void* ms_buf; - size_t ms_count; -} ms_u_read_ocall_t; - -typedef struct ms_u_pread64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - void* ms_buf; - size_t ms_count; - int64_t ms_offset; -} ms_u_pread64_ocall_t; - -typedef struct ms_u_readv_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; -} ms_u_readv_ocall_t; - -typedef struct ms_u_preadv64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; - int64_t ms_offset; -} ms_u_preadv64_ocall_t; - -typedef struct ms_u_write_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const void* ms_buf; - size_t ms_count; -} ms_u_write_ocall_t; - -typedef struct ms_u_pwrite64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const void* ms_buf; - size_t ms_count; - int64_t ms_offset; -} ms_u_pwrite64_ocall_t; - -typedef struct ms_u_writev_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; -} ms_u_writev_ocall_t; - -typedef struct ms_u_pwritev64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; - int64_t ms_offset; -} ms_u_pwritev64_ocall_t; - -typedef struct ms_u_fcntl_arg0_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_cmd; -} ms_u_fcntl_arg0_ocall_t; - -typedef struct ms_u_fcntl_arg1_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_cmd; - int ms_arg; -} ms_u_fcntl_arg1_ocall_t; - -typedef struct ms_u_ioctl_arg0_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_request; -} ms_u_ioctl_arg0_ocall_t; - -typedef struct ms_u_ioctl_arg1_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_request; - int* ms_arg; -} ms_u_ioctl_arg1_ocall_t; - -typedef struct ms_u_close_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_close_ocall_t; - -typedef struct ms_u_malloc_ocall_t { - void* ms_retval; - int* ms_error; - size_t ms_size; -} ms_u_malloc_ocall_t; - -typedef struct ms_u_free_ocall_t { - void* ms_p; -} ms_u_free_ocall_t; - -typedef struct ms_u_mmap_ocall_t { - void* ms_retval; - int* ms_error; - void* ms_start; - size_t ms_length; - int ms_prot; - int ms_flags; - int ms_fd; - int64_t ms_offset; -} ms_u_mmap_ocall_t; - -typedef struct ms_u_munmap_ocall_t { - int ms_retval; - int* ms_error; - void* ms_start; - size_t ms_length; -} ms_u_munmap_ocall_t; - -typedef struct ms_u_msync_ocall_t { - int ms_retval; - int* ms_error; - void* ms_addr; - size_t ms_length; - int ms_flags; -} ms_u_msync_ocall_t; - -typedef struct ms_u_mprotect_ocall_t { - int ms_retval; - int* ms_error; - void* ms_addr; - size_t ms_length; - int ms_prot; -} ms_u_mprotect_ocall_t; - -typedef struct ms_u_open_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; - int ms_flags; -} ms_u_open_ocall_t; - -typedef struct ms_u_open64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int ms_oflag; - int ms_mode; -} ms_u_open64_ocall_t; - -typedef struct ms_u_fstat_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - struct stat_t* ms_buf; -} ms_u_fstat_ocall_t; - -typedef struct ms_u_fstat64_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - struct stat64_t* ms_buf; -} ms_u_fstat64_ocall_t; - -typedef struct ms_u_stat_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat_t* ms_buf; -} ms_u_stat_ocall_t; - -typedef struct ms_u_stat64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat64_t* ms_buf; -} ms_u_stat64_ocall_t; - -typedef struct ms_u_lstat_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat_t* ms_buf; -} ms_u_lstat_ocall_t; - -typedef struct ms_u_lstat64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat64_t* ms_buf; -} ms_u_lstat64_ocall_t; - -typedef struct ms_u_lseek_ocall_t { - uint64_t ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_offset; - int ms_whence; -} ms_u_lseek_ocall_t; - -typedef struct ms_u_lseek64_ocall_t { - int64_t ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_offset; - int ms_whence; -} ms_u_lseek64_ocall_t; - -typedef struct ms_u_ftruncate_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_length; -} ms_u_ftruncate_ocall_t; - -typedef struct ms_u_ftruncate64_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_length; -} ms_u_ftruncate64_ocall_t; - -typedef struct ms_u_truncate_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int64_t ms_length; -} ms_u_truncate_ocall_t; - -typedef struct ms_u_truncate64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int64_t ms_length; -} ms_u_truncate64_ocall_t; - -typedef struct ms_u_fsync_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_fsync_ocall_t; - -typedef struct ms_u_fdatasync_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_fdatasync_ocall_t; - -typedef struct ms_u_fchmod_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - uint32_t ms_mode; -} ms_u_fchmod_ocall_t; - -typedef struct ms_u_unlink_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_unlink_ocall_t; - -typedef struct ms_u_link_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_oldpath; - const char* ms_newpath; -} ms_u_link_ocall_t; - -typedef struct ms_u_rename_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_oldpath; - const char* ms_newpath; -} ms_u_rename_ocall_t; - -typedef struct ms_u_chmod_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - uint32_t ms_mode; -} ms_u_chmod_ocall_t; - -typedef struct ms_u_readlink_ocall_t { - size_t ms_retval; - int* ms_error; - const char* ms_path; - char* ms_buf; - size_t ms_bufsz; -} ms_u_readlink_ocall_t; - -typedef struct ms_u_symlink_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path1; - const char* ms_path2; -} ms_u_symlink_ocall_t; - -typedef struct ms_u_realpath_ocall_t { - char* ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_realpath_ocall_t; - -typedef struct ms_u_mkdir_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; - uint32_t ms_mode; -} ms_u_mkdir_ocall_t; - -typedef struct ms_u_rmdir_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_rmdir_ocall_t; - -typedef struct ms_u_opendir_ocall_t { - void* ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_opendir_ocall_t; - -typedef struct ms_u_readdir64_r_ocall_t { - int ms_retval; - void* ms_dirp; - struct dirent64_t* ms_entry; - struct dirent64_t** ms_result; -} ms_u_readdir64_r_ocall_t; - -typedef struct ms_u_closedir_ocall_t { - int ms_retval; - int* ms_error; - void* ms_dirp; -} ms_u_closedir_ocall_t; - -typedef struct ms_u_dirfd_ocall_t { - int ms_retval; - int* ms_error; - void* ms_dirp; -} ms_u_dirfd_ocall_t; - -typedef struct ms_u_fstatat64_ocall_t { - int ms_retval; - int* ms_error; - int ms_dirfd; - const char* ms_pathname; - struct stat64_t* ms_buf; - int ms_flags; -} ms_u_fstatat64_ocall_t; - -typedef struct ms_sgx_oc_cpuidex_t { - int* ms_cpuinfo; - int ms_leaf; - int ms_subleaf; -} ms_sgx_oc_cpuidex_t; - -typedef struct ms_sgx_thread_wait_untrusted_event_ocall_t { - int ms_retval; - const void* ms_self; -} ms_sgx_thread_wait_untrusted_event_ocall_t; - -typedef struct ms_sgx_thread_set_untrusted_event_ocall_t { - int ms_retval; - const void* ms_waiter; -} ms_sgx_thread_set_untrusted_event_ocall_t; - -typedef struct ms_sgx_thread_setwait_untrusted_events_ocall_t { - int ms_retval; - const void* ms_waiter; - const void* ms_self; -} ms_sgx_thread_setwait_untrusted_events_ocall_t; - -typedef struct ms_sgx_thread_set_multiple_untrusted_events_ocall_t { - int ms_retval; - const void** ms_waiters; - size_t ms_total; -} ms_sgx_thread_set_multiple_untrusted_events_ocall_t; - -static sgx_status_t SGX_CDECL Enclave_u_thread_set_event_ocall(void* pms) -{ - ms_u_thread_set_event_ocall_t* ms = SGX_CAST(ms_u_thread_set_event_ocall_t*, pms); - ms->ms_retval = u_thread_set_event_ocall(ms->ms_error, ms->ms_tcs); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_thread_wait_event_ocall(void* pms) -{ - ms_u_thread_wait_event_ocall_t* ms = SGX_CAST(ms_u_thread_wait_event_ocall_t*, pms); - ms->ms_retval = u_thread_wait_event_ocall(ms->ms_error, ms->ms_tcs, ms->ms_timeout); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_thread_set_multiple_events_ocall(void* pms) -{ - ms_u_thread_set_multiple_events_ocall_t* ms = SGX_CAST(ms_u_thread_set_multiple_events_ocall_t*, pms); - ms->ms_retval = u_thread_set_multiple_events_ocall(ms->ms_error, ms->ms_tcss, ms->ms_total); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_thread_setwait_events_ocall(void* pms) -{ - ms_u_thread_setwait_events_ocall_t* ms = SGX_CAST(ms_u_thread_setwait_events_ocall_t*, pms); - ms->ms_retval = u_thread_setwait_events_ocall(ms->ms_error, ms->ms_waiter_tcs, ms->ms_self_tcs, ms->ms_timeout); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_clock_gettime_ocall(void* pms) -{ - ms_u_clock_gettime_ocall_t* ms = SGX_CAST(ms_u_clock_gettime_ocall_t*, pms); - ms->ms_retval = u_clock_gettime_ocall(ms->ms_error, ms->ms_clk_id, ms->ms_tp); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_read_ocall(void* pms) -{ - ms_u_read_ocall_t* ms = SGX_CAST(ms_u_read_ocall_t*, pms); - ms->ms_retval = u_read_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf, ms->ms_count); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_pread64_ocall(void* pms) -{ - ms_u_pread64_ocall_t* ms = SGX_CAST(ms_u_pread64_ocall_t*, pms); - ms->ms_retval = u_pread64_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf, ms->ms_count, ms->ms_offset); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_readv_ocall(void* pms) -{ - ms_u_readv_ocall_t* ms = SGX_CAST(ms_u_readv_ocall_t*, pms); - ms->ms_retval = u_readv_ocall(ms->ms_error, ms->ms_fd, ms->ms_iov, ms->ms_iovcnt); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_preadv64_ocall(void* pms) -{ - ms_u_preadv64_ocall_t* ms = SGX_CAST(ms_u_preadv64_ocall_t*, pms); - ms->ms_retval = u_preadv64_ocall(ms->ms_error, ms->ms_fd, ms->ms_iov, ms->ms_iovcnt, ms->ms_offset); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_write_ocall(void* pms) -{ - ms_u_write_ocall_t* ms = SGX_CAST(ms_u_write_ocall_t*, pms); - ms->ms_retval = u_write_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf, ms->ms_count); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_pwrite64_ocall(void* pms) -{ - ms_u_pwrite64_ocall_t* ms = SGX_CAST(ms_u_pwrite64_ocall_t*, pms); - ms->ms_retval = u_pwrite64_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf, ms->ms_count, ms->ms_offset); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_writev_ocall(void* pms) -{ - ms_u_writev_ocall_t* ms = SGX_CAST(ms_u_writev_ocall_t*, pms); - ms->ms_retval = u_writev_ocall(ms->ms_error, ms->ms_fd, ms->ms_iov, ms->ms_iovcnt); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_pwritev64_ocall(void* pms) -{ - ms_u_pwritev64_ocall_t* ms = SGX_CAST(ms_u_pwritev64_ocall_t*, pms); - ms->ms_retval = u_pwritev64_ocall(ms->ms_error, ms->ms_fd, ms->ms_iov, ms->ms_iovcnt, ms->ms_offset); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fcntl_arg0_ocall(void* pms) -{ - ms_u_fcntl_arg0_ocall_t* ms = SGX_CAST(ms_u_fcntl_arg0_ocall_t*, pms); - ms->ms_retval = u_fcntl_arg0_ocall(ms->ms_error, ms->ms_fd, ms->ms_cmd); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fcntl_arg1_ocall(void* pms) -{ - ms_u_fcntl_arg1_ocall_t* ms = SGX_CAST(ms_u_fcntl_arg1_ocall_t*, pms); - ms->ms_retval = u_fcntl_arg1_ocall(ms->ms_error, ms->ms_fd, ms->ms_cmd, ms->ms_arg); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_ioctl_arg0_ocall(void* pms) -{ - ms_u_ioctl_arg0_ocall_t* ms = SGX_CAST(ms_u_ioctl_arg0_ocall_t*, pms); - ms->ms_retval = u_ioctl_arg0_ocall(ms->ms_error, ms->ms_fd, ms->ms_request); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_ioctl_arg1_ocall(void* pms) -{ - ms_u_ioctl_arg1_ocall_t* ms = SGX_CAST(ms_u_ioctl_arg1_ocall_t*, pms); - ms->ms_retval = u_ioctl_arg1_ocall(ms->ms_error, ms->ms_fd, ms->ms_request, ms->ms_arg); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_close_ocall(void* pms) -{ - ms_u_close_ocall_t* ms = SGX_CAST(ms_u_close_ocall_t*, pms); - ms->ms_retval = u_close_ocall(ms->ms_error, ms->ms_fd); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_malloc_ocall(void* pms) -{ - ms_u_malloc_ocall_t* ms = SGX_CAST(ms_u_malloc_ocall_t*, pms); - ms->ms_retval = u_malloc_ocall(ms->ms_error, ms->ms_size); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_free_ocall(void* pms) -{ - ms_u_free_ocall_t* ms = SGX_CAST(ms_u_free_ocall_t*, pms); - u_free_ocall(ms->ms_p); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_mmap_ocall(void* pms) -{ - ms_u_mmap_ocall_t* ms = SGX_CAST(ms_u_mmap_ocall_t*, pms); - ms->ms_retval = u_mmap_ocall(ms->ms_error, ms->ms_start, ms->ms_length, ms->ms_prot, ms->ms_flags, ms->ms_fd, ms->ms_offset); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_munmap_ocall(void* pms) -{ - ms_u_munmap_ocall_t* ms = SGX_CAST(ms_u_munmap_ocall_t*, pms); - ms->ms_retval = u_munmap_ocall(ms->ms_error, ms->ms_start, ms->ms_length); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_msync_ocall(void* pms) -{ - ms_u_msync_ocall_t* ms = SGX_CAST(ms_u_msync_ocall_t*, pms); - ms->ms_retval = u_msync_ocall(ms->ms_error, ms->ms_addr, ms->ms_length, ms->ms_flags); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_mprotect_ocall(void* pms) -{ - ms_u_mprotect_ocall_t* ms = SGX_CAST(ms_u_mprotect_ocall_t*, pms); - ms->ms_retval = u_mprotect_ocall(ms->ms_error, ms->ms_addr, ms->ms_length, ms->ms_prot); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_open_ocall(void* pms) -{ - ms_u_open_ocall_t* ms = SGX_CAST(ms_u_open_ocall_t*, pms); - ms->ms_retval = u_open_ocall(ms->ms_error, ms->ms_pathname, ms->ms_flags); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_open64_ocall(void* pms) -{ - ms_u_open64_ocall_t* ms = SGX_CAST(ms_u_open64_ocall_t*, pms); - ms->ms_retval = u_open64_ocall(ms->ms_error, ms->ms_path, ms->ms_oflag, ms->ms_mode); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fstat_ocall(void* pms) -{ - ms_u_fstat_ocall_t* ms = SGX_CAST(ms_u_fstat_ocall_t*, pms); - ms->ms_retval = u_fstat_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fstat64_ocall(void* pms) -{ - ms_u_fstat64_ocall_t* ms = SGX_CAST(ms_u_fstat64_ocall_t*, pms); - ms->ms_retval = u_fstat64_ocall(ms->ms_error, ms->ms_fd, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_stat_ocall(void* pms) -{ - ms_u_stat_ocall_t* ms = SGX_CAST(ms_u_stat_ocall_t*, pms); - ms->ms_retval = u_stat_ocall(ms->ms_error, ms->ms_path, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_stat64_ocall(void* pms) -{ - ms_u_stat64_ocall_t* ms = SGX_CAST(ms_u_stat64_ocall_t*, pms); - ms->ms_retval = u_stat64_ocall(ms->ms_error, ms->ms_path, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_lstat_ocall(void* pms) -{ - ms_u_lstat_ocall_t* ms = SGX_CAST(ms_u_lstat_ocall_t*, pms); - ms->ms_retval = u_lstat_ocall(ms->ms_error, ms->ms_path, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_lstat64_ocall(void* pms) -{ - ms_u_lstat64_ocall_t* ms = SGX_CAST(ms_u_lstat64_ocall_t*, pms); - ms->ms_retval = u_lstat64_ocall(ms->ms_error, ms->ms_path, ms->ms_buf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_lseek_ocall(void* pms) -{ - ms_u_lseek_ocall_t* ms = SGX_CAST(ms_u_lseek_ocall_t*, pms); - ms->ms_retval = u_lseek_ocall(ms->ms_error, ms->ms_fd, ms->ms_offset, ms->ms_whence); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_lseek64_ocall(void* pms) -{ - ms_u_lseek64_ocall_t* ms = SGX_CAST(ms_u_lseek64_ocall_t*, pms); - ms->ms_retval = u_lseek64_ocall(ms->ms_error, ms->ms_fd, ms->ms_offset, ms->ms_whence); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_ftruncate_ocall(void* pms) -{ - ms_u_ftruncate_ocall_t* ms = SGX_CAST(ms_u_ftruncate_ocall_t*, pms); - ms->ms_retval = u_ftruncate_ocall(ms->ms_error, ms->ms_fd, ms->ms_length); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_ftruncate64_ocall(void* pms) -{ - ms_u_ftruncate64_ocall_t* ms = SGX_CAST(ms_u_ftruncate64_ocall_t*, pms); - ms->ms_retval = u_ftruncate64_ocall(ms->ms_error, ms->ms_fd, ms->ms_length); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_truncate_ocall(void* pms) -{ - ms_u_truncate_ocall_t* ms = SGX_CAST(ms_u_truncate_ocall_t*, pms); - ms->ms_retval = u_truncate_ocall(ms->ms_error, ms->ms_path, ms->ms_length); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_truncate64_ocall(void* pms) -{ - ms_u_truncate64_ocall_t* ms = SGX_CAST(ms_u_truncate64_ocall_t*, pms); - ms->ms_retval = u_truncate64_ocall(ms->ms_error, ms->ms_path, ms->ms_length); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fsync_ocall(void* pms) -{ - ms_u_fsync_ocall_t* ms = SGX_CAST(ms_u_fsync_ocall_t*, pms); - ms->ms_retval = u_fsync_ocall(ms->ms_error, ms->ms_fd); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fdatasync_ocall(void* pms) -{ - ms_u_fdatasync_ocall_t* ms = SGX_CAST(ms_u_fdatasync_ocall_t*, pms); - ms->ms_retval = u_fdatasync_ocall(ms->ms_error, ms->ms_fd); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fchmod_ocall(void* pms) -{ - ms_u_fchmod_ocall_t* ms = SGX_CAST(ms_u_fchmod_ocall_t*, pms); - ms->ms_retval = u_fchmod_ocall(ms->ms_error, ms->ms_fd, ms->ms_mode); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_unlink_ocall(void* pms) -{ - ms_u_unlink_ocall_t* ms = SGX_CAST(ms_u_unlink_ocall_t*, pms); - ms->ms_retval = u_unlink_ocall(ms->ms_error, ms->ms_pathname); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_link_ocall(void* pms) -{ - ms_u_link_ocall_t* ms = SGX_CAST(ms_u_link_ocall_t*, pms); - ms->ms_retval = u_link_ocall(ms->ms_error, ms->ms_oldpath, ms->ms_newpath); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_rename_ocall(void* pms) -{ - ms_u_rename_ocall_t* ms = SGX_CAST(ms_u_rename_ocall_t*, pms); - ms->ms_retval = u_rename_ocall(ms->ms_error, ms->ms_oldpath, ms->ms_newpath); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_chmod_ocall(void* pms) -{ - ms_u_chmod_ocall_t* ms = SGX_CAST(ms_u_chmod_ocall_t*, pms); - ms->ms_retval = u_chmod_ocall(ms->ms_error, ms->ms_path, ms->ms_mode); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_readlink_ocall(void* pms) -{ - ms_u_readlink_ocall_t* ms = SGX_CAST(ms_u_readlink_ocall_t*, pms); - ms->ms_retval = u_readlink_ocall(ms->ms_error, ms->ms_path, ms->ms_buf, ms->ms_bufsz); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_symlink_ocall(void* pms) -{ - ms_u_symlink_ocall_t* ms = SGX_CAST(ms_u_symlink_ocall_t*, pms); - ms->ms_retval = u_symlink_ocall(ms->ms_error, ms->ms_path1, ms->ms_path2); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_realpath_ocall(void* pms) -{ - ms_u_realpath_ocall_t* ms = SGX_CAST(ms_u_realpath_ocall_t*, pms); - ms->ms_retval = u_realpath_ocall(ms->ms_error, ms->ms_pathname); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_mkdir_ocall(void* pms) -{ - ms_u_mkdir_ocall_t* ms = SGX_CAST(ms_u_mkdir_ocall_t*, pms); - ms->ms_retval = u_mkdir_ocall(ms->ms_error, ms->ms_pathname, ms->ms_mode); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_rmdir_ocall(void* pms) -{ - ms_u_rmdir_ocall_t* ms = SGX_CAST(ms_u_rmdir_ocall_t*, pms); - ms->ms_retval = u_rmdir_ocall(ms->ms_error, ms->ms_pathname); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_opendir_ocall(void* pms) -{ - ms_u_opendir_ocall_t* ms = SGX_CAST(ms_u_opendir_ocall_t*, pms); - ms->ms_retval = u_opendir_ocall(ms->ms_error, ms->ms_pathname); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_readdir64_r_ocall(void* pms) -{ - ms_u_readdir64_r_ocall_t* ms = SGX_CAST(ms_u_readdir64_r_ocall_t*, pms); - ms->ms_retval = u_readdir64_r_ocall(ms->ms_dirp, ms->ms_entry, ms->ms_result); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_closedir_ocall(void* pms) -{ - ms_u_closedir_ocall_t* ms = SGX_CAST(ms_u_closedir_ocall_t*, pms); - ms->ms_retval = u_closedir_ocall(ms->ms_error, ms->ms_dirp); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_dirfd_ocall(void* pms) -{ - ms_u_dirfd_ocall_t* ms = SGX_CAST(ms_u_dirfd_ocall_t*, pms); - ms->ms_retval = u_dirfd_ocall(ms->ms_error, ms->ms_dirp); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_u_fstatat64_ocall(void* pms) -{ - ms_u_fstatat64_ocall_t* ms = SGX_CAST(ms_u_fstatat64_ocall_t*, pms); - ms->ms_retval = u_fstatat64_ocall(ms->ms_error, ms->ms_dirfd, ms->ms_pathname, ms->ms_buf, ms->ms_flags); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_sgx_oc_cpuidex(void* pms) -{ - ms_sgx_oc_cpuidex_t* ms = SGX_CAST(ms_sgx_oc_cpuidex_t*, pms); - sgx_oc_cpuidex(ms->ms_cpuinfo, ms->ms_leaf, ms->ms_subleaf); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_sgx_thread_wait_untrusted_event_ocall(void* pms) -{ - ms_sgx_thread_wait_untrusted_event_ocall_t* ms = SGX_CAST(ms_sgx_thread_wait_untrusted_event_ocall_t*, pms); - ms->ms_retval = sgx_thread_wait_untrusted_event_ocall(ms->ms_self); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_sgx_thread_set_untrusted_event_ocall(void* pms) -{ - ms_sgx_thread_set_untrusted_event_ocall_t* ms = SGX_CAST(ms_sgx_thread_set_untrusted_event_ocall_t*, pms); - ms->ms_retval = sgx_thread_set_untrusted_event_ocall(ms->ms_waiter); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_sgx_thread_setwait_untrusted_events_ocall(void* pms) -{ - ms_sgx_thread_setwait_untrusted_events_ocall_t* ms = SGX_CAST(ms_sgx_thread_setwait_untrusted_events_ocall_t*, pms); - ms->ms_retval = sgx_thread_setwait_untrusted_events_ocall(ms->ms_waiter, ms->ms_self); - - return SGX_SUCCESS; -} - -static sgx_status_t SGX_CDECL Enclave_sgx_thread_set_multiple_untrusted_events_ocall(void* pms) -{ - ms_sgx_thread_set_multiple_untrusted_events_ocall_t* ms = SGX_CAST(ms_sgx_thread_set_multiple_untrusted_events_ocall_t*, pms); - ms->ms_retval = sgx_thread_set_multiple_untrusted_events_ocall(ms->ms_waiters, ms->ms_total); - - return SGX_SUCCESS; -} - -static const struct { - size_t nr_ocall; - void * table[60]; -} ocall_table_Enclave = { - 60, - { - (void*)Enclave_u_thread_set_event_ocall, - (void*)Enclave_u_thread_wait_event_ocall, - (void*)Enclave_u_thread_set_multiple_events_ocall, - (void*)Enclave_u_thread_setwait_events_ocall, - (void*)Enclave_u_clock_gettime_ocall, - (void*)Enclave_u_read_ocall, - (void*)Enclave_u_pread64_ocall, - (void*)Enclave_u_readv_ocall, - (void*)Enclave_u_preadv64_ocall, - (void*)Enclave_u_write_ocall, - (void*)Enclave_u_pwrite64_ocall, - (void*)Enclave_u_writev_ocall, - (void*)Enclave_u_pwritev64_ocall, - (void*)Enclave_u_fcntl_arg0_ocall, - (void*)Enclave_u_fcntl_arg1_ocall, - (void*)Enclave_u_ioctl_arg0_ocall, - (void*)Enclave_u_ioctl_arg1_ocall, - (void*)Enclave_u_close_ocall, - (void*)Enclave_u_malloc_ocall, - (void*)Enclave_u_free_ocall, - (void*)Enclave_u_mmap_ocall, - (void*)Enclave_u_munmap_ocall, - (void*)Enclave_u_msync_ocall, - (void*)Enclave_u_mprotect_ocall, - (void*)Enclave_u_open_ocall, - (void*)Enclave_u_open64_ocall, - (void*)Enclave_u_fstat_ocall, - (void*)Enclave_u_fstat64_ocall, - (void*)Enclave_u_stat_ocall, - (void*)Enclave_u_stat64_ocall, - (void*)Enclave_u_lstat_ocall, - (void*)Enclave_u_lstat64_ocall, - (void*)Enclave_u_lseek_ocall, - (void*)Enclave_u_lseek64_ocall, - (void*)Enclave_u_ftruncate_ocall, - (void*)Enclave_u_ftruncate64_ocall, - (void*)Enclave_u_truncate_ocall, - (void*)Enclave_u_truncate64_ocall, - (void*)Enclave_u_fsync_ocall, - (void*)Enclave_u_fdatasync_ocall, - (void*)Enclave_u_fchmod_ocall, - (void*)Enclave_u_unlink_ocall, - (void*)Enclave_u_link_ocall, - (void*)Enclave_u_rename_ocall, - (void*)Enclave_u_chmod_ocall, - (void*)Enclave_u_readlink_ocall, - (void*)Enclave_u_symlink_ocall, - (void*)Enclave_u_realpath_ocall, - (void*)Enclave_u_mkdir_ocall, - (void*)Enclave_u_rmdir_ocall, - (void*)Enclave_u_opendir_ocall, - (void*)Enclave_u_readdir64_r_ocall, - (void*)Enclave_u_closedir_ocall, - (void*)Enclave_u_dirfd_ocall, - (void*)Enclave_u_fstatat64_ocall, - (void*)Enclave_sgx_oc_cpuidex, - (void*)Enclave_sgx_thread_wait_untrusted_event_ocall, - (void*)Enclave_sgx_thread_set_untrusted_event_ocall, - (void*)Enclave_sgx_thread_setwait_untrusted_events_ocall, - (void*)Enclave_sgx_thread_set_multiple_untrusted_events_ocall, - } -}; -sgx_status_t say_something(sgx_enclave_id_t eid, sgx_status_t* retval, const uint8_t* some_string, size_t len) -{ - sgx_status_t status; - ms_say_something_t ms; - ms.ms_some_string = some_string; - ms.ms_len = len; - status = sgx_ecall(eid, 0, &ocall_table_Enclave, &ms); - if (status == SGX_SUCCESS && retval) *retval = ms.ms_retval; - return status; -} - -sgx_status_t t_global_init_ecall(sgx_enclave_id_t eid, uint64_t id, const uint8_t* path, size_t len) -{ - sgx_status_t status; - ms_t_global_init_ecall_t ms; - ms.ms_id = id; - ms.ms_path = path; - ms.ms_len = len; - status = sgx_ecall(eid, 1, &ocall_table_Enclave, &ms); - return status; -} - -sgx_status_t t_global_exit_ecall(sgx_enclave_id_t eid) -{ - sgx_status_t status; - status = sgx_ecall(eid, 2, &ocall_table_Enclave, NULL); - return status; -} - diff --git a/enclave/hello-rust/app/Enclave_u.h b/enclave/hello-rust/app/Enclave_u.h deleted file mode 100644 index 793014f..0000000 --- a/enclave/hello-rust/app/Enclave_u.h +++ /dev/null @@ -1,273 +0,0 @@ -#ifndef ENCLAVE_U_H__ -#define ENCLAVE_U_H__ - -#include -#include -#include -#include -#include "sgx_edger8r.h" /* for sgx_status_t etc. */ - -#include "time.h" -#include "inc/stat.h" -#include "sys/uio.h" -#include "inc/stat.h" -#include "inc/dirent.h" - -#include /* for size_t */ - -#define SGX_CAST(type, item) ((type)(item)) - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef U_THREAD_SET_EVENT_OCALL_DEFINED__ -#define U_THREAD_SET_EVENT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_thread_set_event_ocall, (int* error, const void* tcs)); -#endif -#ifndef U_THREAD_WAIT_EVENT_OCALL_DEFINED__ -#define U_THREAD_WAIT_EVENT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_thread_wait_event_ocall, (int* error, const void* tcs, const struct timespec* timeout)); -#endif -#ifndef U_THREAD_SET_MULTIPLE_EVENTS_OCALL_DEFINED__ -#define U_THREAD_SET_MULTIPLE_EVENTS_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_thread_set_multiple_events_ocall, (int* error, const void** tcss, int total)); -#endif -#ifndef U_THREAD_SETWAIT_EVENTS_OCALL_DEFINED__ -#define U_THREAD_SETWAIT_EVENTS_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_thread_setwait_events_ocall, (int* error, const void* waiter_tcs, const void* self_tcs, const struct timespec* timeout)); -#endif -#ifndef U_CLOCK_GETTIME_OCALL_DEFINED__ -#define U_CLOCK_GETTIME_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_clock_gettime_ocall, (int* error, int clk_id, struct timespec* tp)); -#endif -#ifndef U_READ_OCALL_DEFINED__ -#define U_READ_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_read_ocall, (int* error, int fd, void* buf, size_t count)); -#endif -#ifndef U_PREAD64_OCALL_DEFINED__ -#define U_PREAD64_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_pread64_ocall, (int* error, int fd, void* buf, size_t count, int64_t offset)); -#endif -#ifndef U_READV_OCALL_DEFINED__ -#define U_READV_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_readv_ocall, (int* error, int fd, const struct iovec* iov, int iovcnt)); -#endif -#ifndef U_PREADV64_OCALL_DEFINED__ -#define U_PREADV64_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_preadv64_ocall, (int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset)); -#endif -#ifndef U_WRITE_OCALL_DEFINED__ -#define U_WRITE_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_write_ocall, (int* error, int fd, const void* buf, size_t count)); -#endif -#ifndef U_PWRITE64_OCALL_DEFINED__ -#define U_PWRITE64_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_pwrite64_ocall, (int* error, int fd, const void* buf, size_t count, int64_t offset)); -#endif -#ifndef U_WRITEV_OCALL_DEFINED__ -#define U_WRITEV_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_writev_ocall, (int* error, int fd, const struct iovec* iov, int iovcnt)); -#endif -#ifndef U_PWRITEV64_OCALL_DEFINED__ -#define U_PWRITEV64_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_pwritev64_ocall, (int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset)); -#endif -#ifndef U_FCNTL_ARG0_OCALL_DEFINED__ -#define U_FCNTL_ARG0_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fcntl_arg0_ocall, (int* error, int fd, int cmd)); -#endif -#ifndef U_FCNTL_ARG1_OCALL_DEFINED__ -#define U_FCNTL_ARG1_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fcntl_arg1_ocall, (int* error, int fd, int cmd, int arg)); -#endif -#ifndef U_IOCTL_ARG0_OCALL_DEFINED__ -#define U_IOCTL_ARG0_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_ioctl_arg0_ocall, (int* error, int fd, int request)); -#endif -#ifndef U_IOCTL_ARG1_OCALL_DEFINED__ -#define U_IOCTL_ARG1_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_ioctl_arg1_ocall, (int* error, int fd, int request, int* arg)); -#endif -#ifndef U_CLOSE_OCALL_DEFINED__ -#define U_CLOSE_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_close_ocall, (int* error, int fd)); -#endif -#ifndef U_MALLOC_OCALL_DEFINED__ -#define U_MALLOC_OCALL_DEFINED__ -void* SGX_UBRIDGE(SGX_NOCONVENTION, u_malloc_ocall, (int* error, size_t size)); -#endif -#ifndef U_FREE_OCALL_DEFINED__ -#define U_FREE_OCALL_DEFINED__ -void SGX_UBRIDGE(SGX_NOCONVENTION, u_free_ocall, (void* p)); -#endif -#ifndef U_MMAP_OCALL_DEFINED__ -#define U_MMAP_OCALL_DEFINED__ -void* SGX_UBRIDGE(SGX_NOCONVENTION, u_mmap_ocall, (int* error, void* start, size_t length, int prot, int flags, int fd, int64_t offset)); -#endif -#ifndef U_MUNMAP_OCALL_DEFINED__ -#define U_MUNMAP_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_munmap_ocall, (int* error, void* start, size_t length)); -#endif -#ifndef U_MSYNC_OCALL_DEFINED__ -#define U_MSYNC_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_msync_ocall, (int* error, void* addr, size_t length, int flags)); -#endif -#ifndef U_MPROTECT_OCALL_DEFINED__ -#define U_MPROTECT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_mprotect_ocall, (int* error, void* addr, size_t length, int prot)); -#endif -#ifndef U_OPEN_OCALL_DEFINED__ -#define U_OPEN_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_open_ocall, (int* error, const char* pathname, int flags)); -#endif -#ifndef U_OPEN64_OCALL_DEFINED__ -#define U_OPEN64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_open64_ocall, (int* error, const char* path, int oflag, int mode)); -#endif -#ifndef U_FSTAT_OCALL_DEFINED__ -#define U_FSTAT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fstat_ocall, (int* error, int fd, struct stat_t* buf)); -#endif -#ifndef U_FSTAT64_OCALL_DEFINED__ -#define U_FSTAT64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fstat64_ocall, (int* error, int fd, struct stat64_t* buf)); -#endif -#ifndef U_STAT_OCALL_DEFINED__ -#define U_STAT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_stat_ocall, (int* error, const char* path, struct stat_t* buf)); -#endif -#ifndef U_STAT64_OCALL_DEFINED__ -#define U_STAT64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_stat64_ocall, (int* error, const char* path, struct stat64_t* buf)); -#endif -#ifndef U_LSTAT_OCALL_DEFINED__ -#define U_LSTAT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_lstat_ocall, (int* error, const char* path, struct stat_t* buf)); -#endif -#ifndef U_LSTAT64_OCALL_DEFINED__ -#define U_LSTAT64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_lstat64_ocall, (int* error, const char* path, struct stat64_t* buf)); -#endif -#ifndef U_LSEEK_OCALL_DEFINED__ -#define U_LSEEK_OCALL_DEFINED__ -uint64_t SGX_UBRIDGE(SGX_NOCONVENTION, u_lseek_ocall, (int* error, int fd, int64_t offset, int whence)); -#endif -#ifndef U_LSEEK64_OCALL_DEFINED__ -#define U_LSEEK64_OCALL_DEFINED__ -int64_t SGX_UBRIDGE(SGX_NOCONVENTION, u_lseek64_ocall, (int* error, int fd, int64_t offset, int whence)); -#endif -#ifndef U_FTRUNCATE_OCALL_DEFINED__ -#define U_FTRUNCATE_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_ftruncate_ocall, (int* error, int fd, int64_t length)); -#endif -#ifndef U_FTRUNCATE64_OCALL_DEFINED__ -#define U_FTRUNCATE64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_ftruncate64_ocall, (int* error, int fd, int64_t length)); -#endif -#ifndef U_TRUNCATE_OCALL_DEFINED__ -#define U_TRUNCATE_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_truncate_ocall, (int* error, const char* path, int64_t length)); -#endif -#ifndef U_TRUNCATE64_OCALL_DEFINED__ -#define U_TRUNCATE64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_truncate64_ocall, (int* error, const char* path, int64_t length)); -#endif -#ifndef U_FSYNC_OCALL_DEFINED__ -#define U_FSYNC_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fsync_ocall, (int* error, int fd)); -#endif -#ifndef U_FDATASYNC_OCALL_DEFINED__ -#define U_FDATASYNC_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fdatasync_ocall, (int* error, int fd)); -#endif -#ifndef U_FCHMOD_OCALL_DEFINED__ -#define U_FCHMOD_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fchmod_ocall, (int* error, int fd, uint32_t mode)); -#endif -#ifndef U_UNLINK_OCALL_DEFINED__ -#define U_UNLINK_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_unlink_ocall, (int* error, const char* pathname)); -#endif -#ifndef U_LINK_OCALL_DEFINED__ -#define U_LINK_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_link_ocall, (int* error, const char* oldpath, const char* newpath)); -#endif -#ifndef U_RENAME_OCALL_DEFINED__ -#define U_RENAME_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_rename_ocall, (int* error, const char* oldpath, const char* newpath)); -#endif -#ifndef U_CHMOD_OCALL_DEFINED__ -#define U_CHMOD_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_chmod_ocall, (int* error, const char* path, uint32_t mode)); -#endif -#ifndef U_READLINK_OCALL_DEFINED__ -#define U_READLINK_OCALL_DEFINED__ -size_t SGX_UBRIDGE(SGX_NOCONVENTION, u_readlink_ocall, (int* error, const char* path, char* buf, size_t bufsz)); -#endif -#ifndef U_SYMLINK_OCALL_DEFINED__ -#define U_SYMLINK_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_symlink_ocall, (int* error, const char* path1, const char* path2)); -#endif -#ifndef U_REALPATH_OCALL_DEFINED__ -#define U_REALPATH_OCALL_DEFINED__ -char* SGX_UBRIDGE(SGX_NOCONVENTION, u_realpath_ocall, (int* error, const char* pathname)); -#endif -#ifndef U_MKDIR_OCALL_DEFINED__ -#define U_MKDIR_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_mkdir_ocall, (int* error, const char* pathname, uint32_t mode)); -#endif -#ifndef U_RMDIR_OCALL_DEFINED__ -#define U_RMDIR_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_rmdir_ocall, (int* error, const char* pathname)); -#endif -#ifndef U_OPENDIR_OCALL_DEFINED__ -#define U_OPENDIR_OCALL_DEFINED__ -void* SGX_UBRIDGE(SGX_NOCONVENTION, u_opendir_ocall, (int* error, const char* pathname)); -#endif -#ifndef U_READDIR64_R_OCALL_DEFINED__ -#define U_READDIR64_R_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_readdir64_r_ocall, (void* dirp, struct dirent64_t* entry, struct dirent64_t** result)); -#endif -#ifndef U_CLOSEDIR_OCALL_DEFINED__ -#define U_CLOSEDIR_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_closedir_ocall, (int* error, void* dirp)); -#endif -#ifndef U_DIRFD_OCALL_DEFINED__ -#define U_DIRFD_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_dirfd_ocall, (int* error, void* dirp)); -#endif -#ifndef U_FSTATAT64_OCALL_DEFINED__ -#define U_FSTATAT64_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_NOCONVENTION, u_fstatat64_ocall, (int* error, int dirfd, const char* pathname, struct stat64_t* buf, int flags)); -#endif -#ifndef SGX_OC_CPUIDEX_DEFINED__ -#define SGX_OC_CPUIDEX_DEFINED__ -void SGX_UBRIDGE(SGX_CDECL, sgx_oc_cpuidex, (int cpuinfo[4], int leaf, int subleaf)); -#endif -#ifndef SGX_THREAD_WAIT_UNTRUSTED_EVENT_OCALL_DEFINED__ -#define SGX_THREAD_WAIT_UNTRUSTED_EVENT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_CDECL, sgx_thread_wait_untrusted_event_ocall, (const void* self)); -#endif -#ifndef SGX_THREAD_SET_UNTRUSTED_EVENT_OCALL_DEFINED__ -#define SGX_THREAD_SET_UNTRUSTED_EVENT_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_CDECL, sgx_thread_set_untrusted_event_ocall, (const void* waiter)); -#endif -#ifndef SGX_THREAD_SETWAIT_UNTRUSTED_EVENTS_OCALL_DEFINED__ -#define SGX_THREAD_SETWAIT_UNTRUSTED_EVENTS_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_CDECL, sgx_thread_setwait_untrusted_events_ocall, (const void* waiter, const void* self)); -#endif -#ifndef SGX_THREAD_SET_MULTIPLE_UNTRUSTED_EVENTS_OCALL_DEFINED__ -#define SGX_THREAD_SET_MULTIPLE_UNTRUSTED_EVENTS_OCALL_DEFINED__ -int SGX_UBRIDGE(SGX_CDECL, sgx_thread_set_multiple_untrusted_events_ocall, (const void** waiters, size_t total)); -#endif - -sgx_status_t say_something(sgx_enclave_id_t eid, sgx_status_t* retval, const uint8_t* some_string, size_t len); -sgx_status_t t_global_init_ecall(sgx_enclave_id_t eid, uint64_t id, const uint8_t* path, size_t len); -sgx_status_t t_global_exit_ecall(sgx_enclave_id_t eid); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/enclave/hello-rust/bin/app b/enclave/hello-rust/bin/app deleted file mode 100755 index 9feb829..0000000 Binary files a/enclave/hello-rust/bin/app and /dev/null differ diff --git a/enclave/hello-rust/enclave/Enclave_t.c b/enclave/hello-rust/enclave/Enclave_t.c deleted file mode 100644 index 900570c..0000000 --- a/enclave/hello-rust/enclave/Enclave_t.c +++ /dev/null @@ -1,4669 +0,0 @@ -#include "Enclave_t.h" - -#include "sgx_trts.h" /* for sgx_ocalloc, sgx_is_outside_enclave */ -#include "sgx_lfence.h" /* for sgx_lfence */ - -#include -#include /* for memcpy_s etc */ -#include /* for malloc/free etc */ - -#define CHECK_REF_POINTER(ptr, siz) do { \ - if (!(ptr) || ! sgx_is_outside_enclave((ptr), (siz))) \ - return SGX_ERROR_INVALID_PARAMETER;\ -} while (0) - -#define CHECK_UNIQUE_POINTER(ptr, siz) do { \ - if ((ptr) && ! sgx_is_outside_enclave((ptr), (siz))) \ - return SGX_ERROR_INVALID_PARAMETER;\ -} while (0) - -#define CHECK_ENCLAVE_POINTER(ptr, siz) do { \ - if ((ptr) && ! sgx_is_within_enclave((ptr), (siz))) \ - return SGX_ERROR_INVALID_PARAMETER;\ -} while (0) - -#define ADD_ASSIGN_OVERFLOW(a, b) ( \ - ((a) += (b)) < (b) \ -) - - -typedef struct ms_say_something_t { - sgx_status_t ms_retval; - const uint8_t* ms_some_string; - size_t ms_len; -} ms_say_something_t; - -typedef struct ms_t_global_init_ecall_t { - uint64_t ms_id; - const uint8_t* ms_path; - size_t ms_len; -} ms_t_global_init_ecall_t; - -typedef struct ms_u_thread_set_event_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_tcs; -} ms_u_thread_set_event_ocall_t; - -typedef struct ms_u_thread_wait_event_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_tcs; - const struct timespec* ms_timeout; -} ms_u_thread_wait_event_ocall_t; - -typedef struct ms_u_thread_set_multiple_events_ocall_t { - int ms_retval; - int* ms_error; - const void** ms_tcss; - int ms_total; -} ms_u_thread_set_multiple_events_ocall_t; - -typedef struct ms_u_thread_setwait_events_ocall_t { - int ms_retval; - int* ms_error; - const void* ms_waiter_tcs; - const void* ms_self_tcs; - const struct timespec* ms_timeout; -} ms_u_thread_setwait_events_ocall_t; - -typedef struct ms_u_clock_gettime_ocall_t { - int ms_retval; - int* ms_error; - int ms_clk_id; - struct timespec* ms_tp; -} ms_u_clock_gettime_ocall_t; - -typedef struct ms_u_read_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - void* ms_buf; - size_t ms_count; -} ms_u_read_ocall_t; - -typedef struct ms_u_pread64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - void* ms_buf; - size_t ms_count; - int64_t ms_offset; -} ms_u_pread64_ocall_t; - -typedef struct ms_u_readv_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; -} ms_u_readv_ocall_t; - -typedef struct ms_u_preadv64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; - int64_t ms_offset; -} ms_u_preadv64_ocall_t; - -typedef struct ms_u_write_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const void* ms_buf; - size_t ms_count; -} ms_u_write_ocall_t; - -typedef struct ms_u_pwrite64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const void* ms_buf; - size_t ms_count; - int64_t ms_offset; -} ms_u_pwrite64_ocall_t; - -typedef struct ms_u_writev_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; -} ms_u_writev_ocall_t; - -typedef struct ms_u_pwritev64_ocall_t { - size_t ms_retval; - int* ms_error; - int ms_fd; - const struct iovec* ms_iov; - int ms_iovcnt; - int64_t ms_offset; -} ms_u_pwritev64_ocall_t; - -typedef struct ms_u_fcntl_arg0_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_cmd; -} ms_u_fcntl_arg0_ocall_t; - -typedef struct ms_u_fcntl_arg1_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_cmd; - int ms_arg; -} ms_u_fcntl_arg1_ocall_t; - -typedef struct ms_u_ioctl_arg0_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_request; -} ms_u_ioctl_arg0_ocall_t; - -typedef struct ms_u_ioctl_arg1_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int ms_request; - int* ms_arg; -} ms_u_ioctl_arg1_ocall_t; - -typedef struct ms_u_close_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_close_ocall_t; - -typedef struct ms_u_malloc_ocall_t { - void* ms_retval; - int* ms_error; - size_t ms_size; -} ms_u_malloc_ocall_t; - -typedef struct ms_u_free_ocall_t { - void* ms_p; -} ms_u_free_ocall_t; - -typedef struct ms_u_mmap_ocall_t { - void* ms_retval; - int* ms_error; - void* ms_start; - size_t ms_length; - int ms_prot; - int ms_flags; - int ms_fd; - int64_t ms_offset; -} ms_u_mmap_ocall_t; - -typedef struct ms_u_munmap_ocall_t { - int ms_retval; - int* ms_error; - void* ms_start; - size_t ms_length; -} ms_u_munmap_ocall_t; - -typedef struct ms_u_msync_ocall_t { - int ms_retval; - int* ms_error; - void* ms_addr; - size_t ms_length; - int ms_flags; -} ms_u_msync_ocall_t; - -typedef struct ms_u_mprotect_ocall_t { - int ms_retval; - int* ms_error; - void* ms_addr; - size_t ms_length; - int ms_prot; -} ms_u_mprotect_ocall_t; - -typedef struct ms_u_open_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; - int ms_flags; -} ms_u_open_ocall_t; - -typedef struct ms_u_open64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int ms_oflag; - int ms_mode; -} ms_u_open64_ocall_t; - -typedef struct ms_u_fstat_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - struct stat_t* ms_buf; -} ms_u_fstat_ocall_t; - -typedef struct ms_u_fstat64_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - struct stat64_t* ms_buf; -} ms_u_fstat64_ocall_t; - -typedef struct ms_u_stat_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat_t* ms_buf; -} ms_u_stat_ocall_t; - -typedef struct ms_u_stat64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat64_t* ms_buf; -} ms_u_stat64_ocall_t; - -typedef struct ms_u_lstat_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat_t* ms_buf; -} ms_u_lstat_ocall_t; - -typedef struct ms_u_lstat64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - struct stat64_t* ms_buf; -} ms_u_lstat64_ocall_t; - -typedef struct ms_u_lseek_ocall_t { - uint64_t ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_offset; - int ms_whence; -} ms_u_lseek_ocall_t; - -typedef struct ms_u_lseek64_ocall_t { - int64_t ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_offset; - int ms_whence; -} ms_u_lseek64_ocall_t; - -typedef struct ms_u_ftruncate_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_length; -} ms_u_ftruncate_ocall_t; - -typedef struct ms_u_ftruncate64_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - int64_t ms_length; -} ms_u_ftruncate64_ocall_t; - -typedef struct ms_u_truncate_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int64_t ms_length; -} ms_u_truncate_ocall_t; - -typedef struct ms_u_truncate64_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - int64_t ms_length; -} ms_u_truncate64_ocall_t; - -typedef struct ms_u_fsync_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_fsync_ocall_t; - -typedef struct ms_u_fdatasync_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; -} ms_u_fdatasync_ocall_t; - -typedef struct ms_u_fchmod_ocall_t { - int ms_retval; - int* ms_error; - int ms_fd; - uint32_t ms_mode; -} ms_u_fchmod_ocall_t; - -typedef struct ms_u_unlink_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_unlink_ocall_t; - -typedef struct ms_u_link_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_oldpath; - const char* ms_newpath; -} ms_u_link_ocall_t; - -typedef struct ms_u_rename_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_oldpath; - const char* ms_newpath; -} ms_u_rename_ocall_t; - -typedef struct ms_u_chmod_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path; - uint32_t ms_mode; -} ms_u_chmod_ocall_t; - -typedef struct ms_u_readlink_ocall_t { - size_t ms_retval; - int* ms_error; - const char* ms_path; - char* ms_buf; - size_t ms_bufsz; -} ms_u_readlink_ocall_t; - -typedef struct ms_u_symlink_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_path1; - const char* ms_path2; -} ms_u_symlink_ocall_t; - -typedef struct ms_u_realpath_ocall_t { - char* ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_realpath_ocall_t; - -typedef struct ms_u_mkdir_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; - uint32_t ms_mode; -} ms_u_mkdir_ocall_t; - -typedef struct ms_u_rmdir_ocall_t { - int ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_rmdir_ocall_t; - -typedef struct ms_u_opendir_ocall_t { - void* ms_retval; - int* ms_error; - const char* ms_pathname; -} ms_u_opendir_ocall_t; - -typedef struct ms_u_readdir64_r_ocall_t { - int ms_retval; - void* ms_dirp; - struct dirent64_t* ms_entry; - struct dirent64_t** ms_result; -} ms_u_readdir64_r_ocall_t; - -typedef struct ms_u_closedir_ocall_t { - int ms_retval; - int* ms_error; - void* ms_dirp; -} ms_u_closedir_ocall_t; - -typedef struct ms_u_dirfd_ocall_t { - int ms_retval; - int* ms_error; - void* ms_dirp; -} ms_u_dirfd_ocall_t; - -typedef struct ms_u_fstatat64_ocall_t { - int ms_retval; - int* ms_error; - int ms_dirfd; - const char* ms_pathname; - struct stat64_t* ms_buf; - int ms_flags; -} ms_u_fstatat64_ocall_t; - -typedef struct ms_sgx_oc_cpuidex_t { - int* ms_cpuinfo; - int ms_leaf; - int ms_subleaf; -} ms_sgx_oc_cpuidex_t; - -typedef struct ms_sgx_thread_wait_untrusted_event_ocall_t { - int ms_retval; - const void* ms_self; -} ms_sgx_thread_wait_untrusted_event_ocall_t; - -typedef struct ms_sgx_thread_set_untrusted_event_ocall_t { - int ms_retval; - const void* ms_waiter; -} ms_sgx_thread_set_untrusted_event_ocall_t; - -typedef struct ms_sgx_thread_setwait_untrusted_events_ocall_t { - int ms_retval; - const void* ms_waiter; - const void* ms_self; -} ms_sgx_thread_setwait_untrusted_events_ocall_t; - -typedef struct ms_sgx_thread_set_multiple_untrusted_events_ocall_t { - int ms_retval; - const void** ms_waiters; - size_t ms_total; -} ms_sgx_thread_set_multiple_untrusted_events_ocall_t; - -static sgx_status_t SGX_CDECL sgx_say_something(void* pms) -{ - CHECK_REF_POINTER(pms, sizeof(ms_say_something_t)); - // - // fence after pointer checks - // - sgx_lfence(); - ms_say_something_t* ms = SGX_CAST(ms_say_something_t*, pms); - sgx_status_t status = SGX_SUCCESS; - const uint8_t* _tmp_some_string = ms->ms_some_string; - size_t _tmp_len = ms->ms_len; - size_t _len_some_string = _tmp_len; - uint8_t* _in_some_string = NULL; - - CHECK_UNIQUE_POINTER(_tmp_some_string, _len_some_string); - - // - // fence after pointer checks - // - sgx_lfence(); - - if (_tmp_some_string != NULL && _len_some_string != 0) { - if ( _len_some_string % sizeof(*_tmp_some_string) != 0) - { - status = SGX_ERROR_INVALID_PARAMETER; - goto err; - } - _in_some_string = (uint8_t*)malloc(_len_some_string); - if (_in_some_string == NULL) { - status = SGX_ERROR_OUT_OF_MEMORY; - goto err; - } - - if (memcpy_s(_in_some_string, _len_some_string, _tmp_some_string, _len_some_string)) { - status = SGX_ERROR_UNEXPECTED; - goto err; - } - - } - - ms->ms_retval = say_something((const uint8_t*)_in_some_string, _tmp_len); - -err: - if (_in_some_string) free(_in_some_string); - return status; -} - -static sgx_status_t SGX_CDECL sgx_t_global_init_ecall(void* pms) -{ - CHECK_REF_POINTER(pms, sizeof(ms_t_global_init_ecall_t)); - // - // fence after pointer checks - // - sgx_lfence(); - ms_t_global_init_ecall_t* ms = SGX_CAST(ms_t_global_init_ecall_t*, pms); - sgx_status_t status = SGX_SUCCESS; - const uint8_t* _tmp_path = ms->ms_path; - size_t _tmp_len = ms->ms_len; - size_t _len_path = _tmp_len; - uint8_t* _in_path = NULL; - - CHECK_UNIQUE_POINTER(_tmp_path, _len_path); - - // - // fence after pointer checks - // - sgx_lfence(); - - if (_tmp_path != NULL && _len_path != 0) { - if ( _len_path % sizeof(*_tmp_path) != 0) - { - status = SGX_ERROR_INVALID_PARAMETER; - goto err; - } - _in_path = (uint8_t*)malloc(_len_path); - if (_in_path == NULL) { - status = SGX_ERROR_OUT_OF_MEMORY; - goto err; - } - - if (memcpy_s(_in_path, _len_path, _tmp_path, _len_path)) { - status = SGX_ERROR_UNEXPECTED; - goto err; - } - - } - - t_global_init_ecall(ms->ms_id, (const uint8_t*)_in_path, _tmp_len); - -err: - if (_in_path) free(_in_path); - return status; -} - -static sgx_status_t SGX_CDECL sgx_t_global_exit_ecall(void* pms) -{ - sgx_status_t status = SGX_SUCCESS; - if (pms != NULL) return SGX_ERROR_INVALID_PARAMETER; - t_global_exit_ecall(); - return status; -} - -SGX_EXTERNC const struct { - size_t nr_ecall; - struct {void* ecall_addr; uint8_t is_priv; uint8_t is_switchless;} ecall_table[3]; -} g_ecall_table = { - 3, - { - {(void*)(uintptr_t)sgx_say_something, 0, 0}, - {(void*)(uintptr_t)sgx_t_global_init_ecall, 0, 0}, - {(void*)(uintptr_t)sgx_t_global_exit_ecall, 0, 0}, - } -}; - -SGX_EXTERNC const struct { - size_t nr_ocall; - uint8_t entry_table[60][3]; -} g_dyn_entry_table = { - 60, - { - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - {0, 0, 0, }, - } -}; - - -sgx_status_t SGX_CDECL u_thread_set_event_ocall(int* retval, int* error, const void* tcs) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_thread_set_event_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_thread_set_event_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_thread_set_event_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_thread_set_event_ocall_t)); - ocalloc_size -= sizeof(ms_u_thread_set_event_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_tcs = tcs; - status = sgx_ocall(0, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_thread_wait_event_ocall(int* retval, int* error, const void* tcs, const struct timespec* timeout) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_timeout = sizeof(struct timespec); - - ms_u_thread_wait_event_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_thread_wait_event_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(timeout, _len_timeout); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (timeout != NULL) ? _len_timeout : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_thread_wait_event_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_thread_wait_event_ocall_t)); - ocalloc_size -= sizeof(ms_u_thread_wait_event_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_tcs = tcs; - if (timeout != NULL) { - ms->ms_timeout = (const struct timespec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, timeout, _len_timeout)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_timeout); - ocalloc_size -= _len_timeout; - } else { - ms->ms_timeout = NULL; - } - - status = sgx_ocall(1, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_thread_set_multiple_events_ocall(int* retval, int* error, const void** tcss, int total) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_tcss = total * sizeof(void*); - - ms_u_thread_set_multiple_events_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_thread_set_multiple_events_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(tcss, _len_tcss); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (tcss != NULL) ? _len_tcss : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_thread_set_multiple_events_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_thread_set_multiple_events_ocall_t)); - ocalloc_size -= sizeof(ms_u_thread_set_multiple_events_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (tcss != NULL) { - ms->ms_tcss = (const void**)__tmp; - if (_len_tcss % sizeof(*tcss) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, tcss, _len_tcss)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_tcss); - ocalloc_size -= _len_tcss; - } else { - ms->ms_tcss = NULL; - } - - ms->ms_total = total; - status = sgx_ocall(2, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_thread_setwait_events_ocall(int* retval, int* error, const void* waiter_tcs, const void* self_tcs, const struct timespec* timeout) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_timeout = sizeof(struct timespec); - - ms_u_thread_setwait_events_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_thread_setwait_events_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(timeout, _len_timeout); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (timeout != NULL) ? _len_timeout : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_thread_setwait_events_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_thread_setwait_events_ocall_t)); - ocalloc_size -= sizeof(ms_u_thread_setwait_events_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_waiter_tcs = waiter_tcs; - ms->ms_self_tcs = self_tcs; - if (timeout != NULL) { - ms->ms_timeout = (const struct timespec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, timeout, _len_timeout)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_timeout); - ocalloc_size -= _len_timeout; - } else { - ms->ms_timeout = NULL; - } - - status = sgx_ocall(3, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_clock_gettime_ocall(int* retval, int* error, int clk_id, struct timespec* tp) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_tp = sizeof(struct timespec); - - ms_u_clock_gettime_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_clock_gettime_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_tp = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(tp, _len_tp); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (tp != NULL) ? _len_tp : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_clock_gettime_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_clock_gettime_ocall_t)); - ocalloc_size -= sizeof(ms_u_clock_gettime_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_clk_id = clk_id; - if (tp != NULL) { - ms->ms_tp = (struct timespec*)__tmp; - __tmp_tp = __tmp; - memset(__tmp_tp, 0, _len_tp); - __tmp = (void *)((size_t)__tmp + _len_tp); - ocalloc_size -= _len_tp; - } else { - ms->ms_tp = NULL; - } - - status = sgx_ocall(4, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (tp) { - if (memcpy_s((void*)tp, _len_tp, __tmp_tp, _len_tp)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_read_ocall(size_t* retval, int* error, int fd, void* buf, size_t count) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_read_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_read_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_read_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_read_ocall_t)); - ocalloc_size -= sizeof(ms_u_read_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_buf = buf; - ms->ms_count = count; - status = sgx_ocall(5, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_pread64_ocall(size_t* retval, int* error, int fd, void* buf, size_t count, int64_t offset) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_pread64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_pread64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_pread64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_pread64_ocall_t)); - ocalloc_size -= sizeof(ms_u_pread64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_buf = buf; - ms->ms_count = count; - ms->ms_offset = offset; - status = sgx_ocall(6, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_readv_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_iov = iovcnt * sizeof(struct iovec); - - ms_u_readv_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_readv_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(iov, _len_iov); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (iov != NULL) ? _len_iov : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_readv_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_readv_ocall_t)); - ocalloc_size -= sizeof(ms_u_readv_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (iov != NULL) { - ms->ms_iov = (const struct iovec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, iov, _len_iov)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_iov); - ocalloc_size -= _len_iov; - } else { - ms->ms_iov = NULL; - } - - ms->ms_iovcnt = iovcnt; - status = sgx_ocall(7, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_preadv64_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_iov = iovcnt * sizeof(struct iovec); - - ms_u_preadv64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_preadv64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(iov, _len_iov); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (iov != NULL) ? _len_iov : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_preadv64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_preadv64_ocall_t)); - ocalloc_size -= sizeof(ms_u_preadv64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (iov != NULL) { - ms->ms_iov = (const struct iovec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, iov, _len_iov)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_iov); - ocalloc_size -= _len_iov; - } else { - ms->ms_iov = NULL; - } - - ms->ms_iovcnt = iovcnt; - ms->ms_offset = offset; - status = sgx_ocall(8, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_write_ocall(size_t* retval, int* error, int fd, const void* buf, size_t count) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_write_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_write_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_write_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_write_ocall_t)); - ocalloc_size -= sizeof(ms_u_write_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_buf = buf; - ms->ms_count = count; - status = sgx_ocall(9, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_pwrite64_ocall(size_t* retval, int* error, int fd, const void* buf, size_t count, int64_t offset) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_pwrite64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_pwrite64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_pwrite64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_pwrite64_ocall_t)); - ocalloc_size -= sizeof(ms_u_pwrite64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_buf = buf; - ms->ms_count = count; - ms->ms_offset = offset; - status = sgx_ocall(10, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_writev_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_iov = iovcnt * sizeof(struct iovec); - - ms_u_writev_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_writev_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(iov, _len_iov); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (iov != NULL) ? _len_iov : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_writev_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_writev_ocall_t)); - ocalloc_size -= sizeof(ms_u_writev_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (iov != NULL) { - ms->ms_iov = (const struct iovec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, iov, _len_iov)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_iov); - ocalloc_size -= _len_iov; - } else { - ms->ms_iov = NULL; - } - - ms->ms_iovcnt = iovcnt; - status = sgx_ocall(11, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_pwritev64_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_iov = iovcnt * sizeof(struct iovec); - - ms_u_pwritev64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_pwritev64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(iov, _len_iov); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (iov != NULL) ? _len_iov : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_pwritev64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_pwritev64_ocall_t)); - ocalloc_size -= sizeof(ms_u_pwritev64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (iov != NULL) { - ms->ms_iov = (const struct iovec*)__tmp; - if (memcpy_s(__tmp, ocalloc_size, iov, _len_iov)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_iov); - ocalloc_size -= _len_iov; - } else { - ms->ms_iov = NULL; - } - - ms->ms_iovcnt = iovcnt; - ms->ms_offset = offset; - status = sgx_ocall(12, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fcntl_arg0_ocall(int* retval, int* error, int fd, int cmd) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_fcntl_arg0_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fcntl_arg0_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fcntl_arg0_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fcntl_arg0_ocall_t)); - ocalloc_size -= sizeof(ms_u_fcntl_arg0_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_cmd = cmd; - status = sgx_ocall(13, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fcntl_arg1_ocall(int* retval, int* error, int fd, int cmd, int arg) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_fcntl_arg1_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fcntl_arg1_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fcntl_arg1_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fcntl_arg1_ocall_t)); - ocalloc_size -= sizeof(ms_u_fcntl_arg1_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_cmd = cmd; - ms->ms_arg = arg; - status = sgx_ocall(14, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_ioctl_arg0_ocall(int* retval, int* error, int fd, int request) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_ioctl_arg0_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_ioctl_arg0_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_ioctl_arg0_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_ioctl_arg0_ocall_t)); - ocalloc_size -= sizeof(ms_u_ioctl_arg0_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_request = request; - status = sgx_ocall(15, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_ioctl_arg1_ocall(int* retval, int* error, int fd, int request, int* arg) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_arg = sizeof(int); - - ms_u_ioctl_arg1_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_ioctl_arg1_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_arg = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(arg, _len_arg); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (arg != NULL) ? _len_arg : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_ioctl_arg1_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_ioctl_arg1_ocall_t)); - ocalloc_size -= sizeof(ms_u_ioctl_arg1_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_request = request; - if (arg != NULL) { - ms->ms_arg = (int*)__tmp; - __tmp_arg = __tmp; - if (_len_arg % sizeof(*arg) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp_arg, ocalloc_size, arg, _len_arg)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_arg); - ocalloc_size -= _len_arg; - } else { - ms->ms_arg = NULL; - } - - status = sgx_ocall(16, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (arg) { - if (memcpy_s((void*)arg, _len_arg, __tmp_arg, _len_arg)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_close_ocall(int* retval, int* error, int fd) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_close_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_close_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_close_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_close_ocall_t)); - ocalloc_size -= sizeof(ms_u_close_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - status = sgx_ocall(17, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_malloc_ocall(void** retval, int* error, size_t size) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_malloc_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_malloc_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_malloc_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_malloc_ocall_t)); - ocalloc_size -= sizeof(ms_u_malloc_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_size = size; - status = sgx_ocall(18, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_free_ocall(void* p) -{ - sgx_status_t status = SGX_SUCCESS; - - ms_u_free_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_free_ocall_t); - void *__tmp = NULL; - - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_free_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_free_ocall_t)); - ocalloc_size -= sizeof(ms_u_free_ocall_t); - - ms->ms_p = p; - status = sgx_ocall(19, ms); - - if (status == SGX_SUCCESS) { - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_mmap_ocall(void** retval, int* error, void* start, size_t length, int prot, int flags, int fd, int64_t offset) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_mmap_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_mmap_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_mmap_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_mmap_ocall_t)); - ocalloc_size -= sizeof(ms_u_mmap_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_start = start; - ms->ms_length = length; - ms->ms_prot = prot; - ms->ms_flags = flags; - ms->ms_fd = fd; - ms->ms_offset = offset; - status = sgx_ocall(20, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_munmap_ocall(int* retval, int* error, void* start, size_t length) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_munmap_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_munmap_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_munmap_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_munmap_ocall_t)); - ocalloc_size -= sizeof(ms_u_munmap_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_start = start; - ms->ms_length = length; - status = sgx_ocall(21, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_msync_ocall(int* retval, int* error, void* addr, size_t length, int flags) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_msync_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_msync_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_msync_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_msync_ocall_t)); - ocalloc_size -= sizeof(ms_u_msync_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_addr = addr; - ms->ms_length = length; - ms->ms_flags = flags; - status = sgx_ocall(22, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_mprotect_ocall(int* retval, int* error, void* addr, size_t length, int prot) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_mprotect_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_mprotect_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_mprotect_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_mprotect_ocall_t)); - ocalloc_size -= sizeof(ms_u_mprotect_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_addr = addr; - ms->ms_length = length; - ms->ms_prot = prot; - status = sgx_ocall(23, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_open_ocall(int* retval, int* error, const char* pathname, int flags) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_open_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_open_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_open_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_open_ocall_t)); - ocalloc_size -= sizeof(ms_u_open_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - ms->ms_flags = flags; - status = sgx_ocall(24, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_open64_ocall(int* retval, int* error, const char* path, int oflag, int mode) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - - ms_u_open64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_open64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_open64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_open64_ocall_t)); - ocalloc_size -= sizeof(ms_u_open64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - ms->ms_oflag = oflag; - ms->ms_mode = mode; - status = sgx_ocall(25, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fstat_ocall(int* retval, int* error, int fd, struct stat_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_buf = sizeof(struct stat_t); - - ms_u_fstat_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fstat_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fstat_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fstat_ocall_t)); - ocalloc_size -= sizeof(ms_u_fstat_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (buf != NULL) { - ms->ms_buf = (struct stat_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(26, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fstat64_ocall(int* retval, int* error, int fd, struct stat64_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_buf = sizeof(struct stat64_t); - - ms_u_fstat64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fstat64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fstat64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fstat64_ocall_t)); - ocalloc_size -= sizeof(ms_u_fstat64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - if (buf != NULL) { - ms->ms_buf = (struct stat64_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(27, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_stat_ocall(int* retval, int* error, const char* path, struct stat_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - size_t _len_buf = sizeof(struct stat_t); - - ms_u_stat_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_stat_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_stat_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_stat_ocall_t)); - ocalloc_size -= sizeof(ms_u_stat_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (struct stat_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(28, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_stat64_ocall(int* retval, int* error, const char* path, struct stat64_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - size_t _len_buf = sizeof(struct stat64_t); - - ms_u_stat64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_stat64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_stat64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_stat64_ocall_t)); - ocalloc_size -= sizeof(ms_u_stat64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (struct stat64_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(29, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_lstat_ocall(int* retval, int* error, const char* path, struct stat_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - size_t _len_buf = sizeof(struct stat_t); - - ms_u_lstat_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_lstat_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_lstat_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_lstat_ocall_t)); - ocalloc_size -= sizeof(ms_u_lstat_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (struct stat_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(30, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_lstat64_ocall(int* retval, int* error, const char* path, struct stat64_t* buf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - size_t _len_buf = sizeof(struct stat64_t); - - ms_u_lstat64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_lstat64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_lstat64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_lstat64_ocall_t)); - ocalloc_size -= sizeof(ms_u_lstat64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (struct stat64_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - status = sgx_ocall(31, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_lseek_ocall(uint64_t* retval, int* error, int fd, int64_t offset, int whence) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_lseek_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_lseek_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_lseek_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_lseek_ocall_t)); - ocalloc_size -= sizeof(ms_u_lseek_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_offset = offset; - ms->ms_whence = whence; - status = sgx_ocall(32, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_lseek64_ocall(int64_t* retval, int* error, int fd, int64_t offset, int whence) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_lseek64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_lseek64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_lseek64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_lseek64_ocall_t)); - ocalloc_size -= sizeof(ms_u_lseek64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_offset = offset; - ms->ms_whence = whence; - status = sgx_ocall(33, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_ftruncate_ocall(int* retval, int* error, int fd, int64_t length) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_ftruncate_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_ftruncate_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_ftruncate_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_ftruncate_ocall_t)); - ocalloc_size -= sizeof(ms_u_ftruncate_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_length = length; - status = sgx_ocall(34, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_ftruncate64_ocall(int* retval, int* error, int fd, int64_t length) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_ftruncate64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_ftruncate64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_ftruncate64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_ftruncate64_ocall_t)); - ocalloc_size -= sizeof(ms_u_ftruncate64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_length = length; - status = sgx_ocall(35, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_truncate_ocall(int* retval, int* error, const char* path, int64_t length) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - - ms_u_truncate_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_truncate_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_truncate_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_truncate_ocall_t)); - ocalloc_size -= sizeof(ms_u_truncate_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - ms->ms_length = length; - status = sgx_ocall(36, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_truncate64_ocall(int* retval, int* error, const char* path, int64_t length) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - - ms_u_truncate64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_truncate64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_truncate64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_truncate64_ocall_t)); - ocalloc_size -= sizeof(ms_u_truncate64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - ms->ms_length = length; - status = sgx_ocall(37, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fsync_ocall(int* retval, int* error, int fd) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_fsync_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fsync_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fsync_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fsync_ocall_t)); - ocalloc_size -= sizeof(ms_u_fsync_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - status = sgx_ocall(38, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fdatasync_ocall(int* retval, int* error, int fd) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_fdatasync_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fdatasync_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fdatasync_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fdatasync_ocall_t)); - ocalloc_size -= sizeof(ms_u_fdatasync_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - status = sgx_ocall(39, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fchmod_ocall(int* retval, int* error, int fd, uint32_t mode) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_fchmod_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fchmod_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fchmod_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fchmod_ocall_t)); - ocalloc_size -= sizeof(ms_u_fchmod_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_fd = fd; - ms->ms_mode = mode; - status = sgx_ocall(40, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_unlink_ocall(int* retval, int* error, const char* pathname) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_unlink_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_unlink_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_unlink_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_unlink_ocall_t)); - ocalloc_size -= sizeof(ms_u_unlink_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - status = sgx_ocall(41, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_link_ocall(int* retval, int* error, const char* oldpath, const char* newpath) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_oldpath = oldpath ? strlen(oldpath) + 1 : 0; - size_t _len_newpath = newpath ? strlen(newpath) + 1 : 0; - - ms_u_link_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_link_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(oldpath, _len_oldpath); - CHECK_ENCLAVE_POINTER(newpath, _len_newpath); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (oldpath != NULL) ? _len_oldpath : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (newpath != NULL) ? _len_newpath : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_link_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_link_ocall_t)); - ocalloc_size -= sizeof(ms_u_link_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (oldpath != NULL) { - ms->ms_oldpath = (const char*)__tmp; - if (_len_oldpath % sizeof(*oldpath) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, oldpath, _len_oldpath)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_oldpath); - ocalloc_size -= _len_oldpath; - } else { - ms->ms_oldpath = NULL; - } - - if (newpath != NULL) { - ms->ms_newpath = (const char*)__tmp; - if (_len_newpath % sizeof(*newpath) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, newpath, _len_newpath)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_newpath); - ocalloc_size -= _len_newpath; - } else { - ms->ms_newpath = NULL; - } - - status = sgx_ocall(42, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_rename_ocall(int* retval, int* error, const char* oldpath, const char* newpath) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_oldpath = oldpath ? strlen(oldpath) + 1 : 0; - size_t _len_newpath = newpath ? strlen(newpath) + 1 : 0; - - ms_u_rename_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_rename_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(oldpath, _len_oldpath); - CHECK_ENCLAVE_POINTER(newpath, _len_newpath); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (oldpath != NULL) ? _len_oldpath : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (newpath != NULL) ? _len_newpath : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_rename_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_rename_ocall_t)); - ocalloc_size -= sizeof(ms_u_rename_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (oldpath != NULL) { - ms->ms_oldpath = (const char*)__tmp; - if (_len_oldpath % sizeof(*oldpath) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, oldpath, _len_oldpath)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_oldpath); - ocalloc_size -= _len_oldpath; - } else { - ms->ms_oldpath = NULL; - } - - if (newpath != NULL) { - ms->ms_newpath = (const char*)__tmp; - if (_len_newpath % sizeof(*newpath) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, newpath, _len_newpath)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_newpath); - ocalloc_size -= _len_newpath; - } else { - ms->ms_newpath = NULL; - } - - status = sgx_ocall(43, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_chmod_ocall(int* retval, int* error, const char* path, uint32_t mode) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - - ms_u_chmod_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_chmod_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_chmod_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_chmod_ocall_t)); - ocalloc_size -= sizeof(ms_u_chmod_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - ms->ms_mode = mode; - status = sgx_ocall(44, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_readlink_ocall(size_t* retval, int* error, const char* path, char* buf, size_t bufsz) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path = path ? strlen(path) + 1 : 0; - size_t _len_buf = bufsz; - - ms_u_readlink_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_readlink_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path, _len_path); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path != NULL) ? _len_path : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_readlink_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_readlink_ocall_t)); - ocalloc_size -= sizeof(ms_u_readlink_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path != NULL) { - ms->ms_path = (const char*)__tmp; - if (_len_path % sizeof(*path) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path, _len_path)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path); - ocalloc_size -= _len_path; - } else { - ms->ms_path = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (char*)__tmp; - __tmp_buf = __tmp; - if (_len_buf % sizeof(*buf) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - ms->ms_bufsz = bufsz; - status = sgx_ocall(45, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_symlink_ocall(int* retval, int* error, const char* path1, const char* path2) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_path1 = path1 ? strlen(path1) + 1 : 0; - size_t _len_path2 = path2 ? strlen(path2) + 1 : 0; - - ms_u_symlink_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_symlink_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(path1, _len_path1); - CHECK_ENCLAVE_POINTER(path2, _len_path2); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path1 != NULL) ? _len_path1 : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (path2 != NULL) ? _len_path2 : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_symlink_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_symlink_ocall_t)); - ocalloc_size -= sizeof(ms_u_symlink_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (path1 != NULL) { - ms->ms_path1 = (const char*)__tmp; - if (_len_path1 % sizeof(*path1) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path1, _len_path1)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path1); - ocalloc_size -= _len_path1; - } else { - ms->ms_path1 = NULL; - } - - if (path2 != NULL) { - ms->ms_path2 = (const char*)__tmp; - if (_len_path2 % sizeof(*path2) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, path2, _len_path2)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_path2); - ocalloc_size -= _len_path2; - } else { - ms->ms_path2 = NULL; - } - - status = sgx_ocall(46, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_realpath_ocall(char** retval, int* error, const char* pathname) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_realpath_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_realpath_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_realpath_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_realpath_ocall_t)); - ocalloc_size -= sizeof(ms_u_realpath_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - status = sgx_ocall(47, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_mkdir_ocall(int* retval, int* error, const char* pathname, uint32_t mode) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_mkdir_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_mkdir_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_mkdir_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_mkdir_ocall_t)); - ocalloc_size -= sizeof(ms_u_mkdir_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - ms->ms_mode = mode; - status = sgx_ocall(48, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_rmdir_ocall(int* retval, int* error, const char* pathname) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_rmdir_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_rmdir_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_rmdir_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_rmdir_ocall_t)); - ocalloc_size -= sizeof(ms_u_rmdir_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - status = sgx_ocall(49, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_opendir_ocall(void** retval, int* error, const char* pathname) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - - ms_u_opendir_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_opendir_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_opendir_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_opendir_ocall_t)); - ocalloc_size -= sizeof(ms_u_opendir_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - status = sgx_ocall(50, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_readdir64_r_ocall(int* retval, void* dirp, struct dirent64_t* entry, struct dirent64_t** result) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_entry = sizeof(struct dirent64_t); - size_t _len_result = sizeof(struct dirent64_t*); - - ms_u_readdir64_r_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_readdir64_r_ocall_t); - void *__tmp = NULL; - - void *__tmp_entry = NULL; - void *__tmp_result = NULL; - - CHECK_ENCLAVE_POINTER(entry, _len_entry); - CHECK_ENCLAVE_POINTER(result, _len_result); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (entry != NULL) ? _len_entry : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (result != NULL) ? _len_result : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_readdir64_r_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_readdir64_r_ocall_t)); - ocalloc_size -= sizeof(ms_u_readdir64_r_ocall_t); - - ms->ms_dirp = dirp; - if (entry != NULL) { - ms->ms_entry = (struct dirent64_t*)__tmp; - __tmp_entry = __tmp; - if (memcpy_s(__tmp_entry, ocalloc_size, entry, _len_entry)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_entry); - ocalloc_size -= _len_entry; - } else { - ms->ms_entry = NULL; - } - - if (result != NULL) { - ms->ms_result = (struct dirent64_t**)__tmp; - __tmp_result = __tmp; - if (_len_result % sizeof(*result) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_result, 0, _len_result); - __tmp = (void *)((size_t)__tmp + _len_result); - ocalloc_size -= _len_result; - } else { - ms->ms_result = NULL; - } - - status = sgx_ocall(51, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (entry) { - if (memcpy_s((void*)entry, _len_entry, __tmp_entry, _len_entry)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (result) { - if (memcpy_s((void*)result, _len_result, __tmp_result, _len_result)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_closedir_ocall(int* retval, int* error, void* dirp) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_closedir_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_closedir_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_closedir_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_closedir_ocall_t)); - ocalloc_size -= sizeof(ms_u_closedir_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_dirp = dirp; - status = sgx_ocall(52, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_dirfd_ocall(int* retval, int* error, void* dirp) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - - ms_u_dirfd_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_dirfd_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_dirfd_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_dirfd_ocall_t)); - ocalloc_size -= sizeof(ms_u_dirfd_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_dirp = dirp; - status = sgx_ocall(53, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL u_fstatat64_ocall(int* retval, int* error, int dirfd, const char* pathname, struct stat64_t* buf, int flags) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_error = sizeof(int); - size_t _len_pathname = pathname ? strlen(pathname) + 1 : 0; - size_t _len_buf = sizeof(struct stat64_t); - - ms_u_fstatat64_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_u_fstatat64_ocall_t); - void *__tmp = NULL; - - void *__tmp_error = NULL; - void *__tmp_buf = NULL; - - CHECK_ENCLAVE_POINTER(error, _len_error); - CHECK_ENCLAVE_POINTER(pathname, _len_pathname); - CHECK_ENCLAVE_POINTER(buf, _len_buf); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (error != NULL) ? _len_error : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (pathname != NULL) ? _len_pathname : 0)) - return SGX_ERROR_INVALID_PARAMETER; - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (buf != NULL) ? _len_buf : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_u_fstatat64_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_u_fstatat64_ocall_t)); - ocalloc_size -= sizeof(ms_u_fstatat64_ocall_t); - - if (error != NULL) { - ms->ms_error = (int*)__tmp; - __tmp_error = __tmp; - if (_len_error % sizeof(*error) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_error, 0, _len_error); - __tmp = (void *)((size_t)__tmp + _len_error); - ocalloc_size -= _len_error; - } else { - ms->ms_error = NULL; - } - - ms->ms_dirfd = dirfd; - if (pathname != NULL) { - ms->ms_pathname = (const char*)__tmp; - if (_len_pathname % sizeof(*pathname) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, pathname, _len_pathname)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_pathname); - ocalloc_size -= _len_pathname; - } else { - ms->ms_pathname = NULL; - } - - if (buf != NULL) { - ms->ms_buf = (struct stat64_t*)__tmp; - __tmp_buf = __tmp; - memset(__tmp_buf, 0, _len_buf); - __tmp = (void *)((size_t)__tmp + _len_buf); - ocalloc_size -= _len_buf; - } else { - ms->ms_buf = NULL; - } - - ms->ms_flags = flags; - status = sgx_ocall(54, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - if (error) { - if (memcpy_s((void*)error, _len_error, __tmp_error, _len_error)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - if (buf) { - if (memcpy_s((void*)buf, _len_buf, __tmp_buf, _len_buf)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL sgx_oc_cpuidex(int cpuinfo[4], int leaf, int subleaf) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_cpuinfo = 4 * sizeof(int); - - ms_sgx_oc_cpuidex_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_sgx_oc_cpuidex_t); - void *__tmp = NULL; - - void *__tmp_cpuinfo = NULL; - - CHECK_ENCLAVE_POINTER(cpuinfo, _len_cpuinfo); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (cpuinfo != NULL) ? _len_cpuinfo : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_sgx_oc_cpuidex_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_sgx_oc_cpuidex_t)); - ocalloc_size -= sizeof(ms_sgx_oc_cpuidex_t); - - if (cpuinfo != NULL) { - ms->ms_cpuinfo = (int*)__tmp; - __tmp_cpuinfo = __tmp; - if (_len_cpuinfo % sizeof(*cpuinfo) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - memset(__tmp_cpuinfo, 0, _len_cpuinfo); - __tmp = (void *)((size_t)__tmp + _len_cpuinfo); - ocalloc_size -= _len_cpuinfo; - } else { - ms->ms_cpuinfo = NULL; - } - - ms->ms_leaf = leaf; - ms->ms_subleaf = subleaf; - status = sgx_ocall(55, ms); - - if (status == SGX_SUCCESS) { - if (cpuinfo) { - if (memcpy_s((void*)cpuinfo, _len_cpuinfo, __tmp_cpuinfo, _len_cpuinfo)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - } - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL sgx_thread_wait_untrusted_event_ocall(int* retval, const void* self) -{ - sgx_status_t status = SGX_SUCCESS; - - ms_sgx_thread_wait_untrusted_event_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_sgx_thread_wait_untrusted_event_ocall_t); - void *__tmp = NULL; - - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_sgx_thread_wait_untrusted_event_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_sgx_thread_wait_untrusted_event_ocall_t)); - ocalloc_size -= sizeof(ms_sgx_thread_wait_untrusted_event_ocall_t); - - ms->ms_self = self; - status = sgx_ocall(56, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL sgx_thread_set_untrusted_event_ocall(int* retval, const void* waiter) -{ - sgx_status_t status = SGX_SUCCESS; - - ms_sgx_thread_set_untrusted_event_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_sgx_thread_set_untrusted_event_ocall_t); - void *__tmp = NULL; - - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_sgx_thread_set_untrusted_event_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_sgx_thread_set_untrusted_event_ocall_t)); - ocalloc_size -= sizeof(ms_sgx_thread_set_untrusted_event_ocall_t); - - ms->ms_waiter = waiter; - status = sgx_ocall(57, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL sgx_thread_setwait_untrusted_events_ocall(int* retval, const void* waiter, const void* self) -{ - sgx_status_t status = SGX_SUCCESS; - - ms_sgx_thread_setwait_untrusted_events_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_sgx_thread_setwait_untrusted_events_ocall_t); - void *__tmp = NULL; - - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_sgx_thread_setwait_untrusted_events_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_sgx_thread_setwait_untrusted_events_ocall_t)); - ocalloc_size -= sizeof(ms_sgx_thread_setwait_untrusted_events_ocall_t); - - ms->ms_waiter = waiter; - ms->ms_self = self; - status = sgx_ocall(58, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - } - sgx_ocfree(); - return status; -} - -sgx_status_t SGX_CDECL sgx_thread_set_multiple_untrusted_events_ocall(int* retval, const void** waiters, size_t total) -{ - sgx_status_t status = SGX_SUCCESS; - size_t _len_waiters = total * sizeof(void*); - - ms_sgx_thread_set_multiple_untrusted_events_ocall_t* ms = NULL; - size_t ocalloc_size = sizeof(ms_sgx_thread_set_multiple_untrusted_events_ocall_t); - void *__tmp = NULL; - - - CHECK_ENCLAVE_POINTER(waiters, _len_waiters); - - if (ADD_ASSIGN_OVERFLOW(ocalloc_size, (waiters != NULL) ? _len_waiters : 0)) - return SGX_ERROR_INVALID_PARAMETER; - - __tmp = sgx_ocalloc(ocalloc_size); - if (__tmp == NULL) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - ms = (ms_sgx_thread_set_multiple_untrusted_events_ocall_t*)__tmp; - __tmp = (void *)((size_t)__tmp + sizeof(ms_sgx_thread_set_multiple_untrusted_events_ocall_t)); - ocalloc_size -= sizeof(ms_sgx_thread_set_multiple_untrusted_events_ocall_t); - - if (waiters != NULL) { - ms->ms_waiters = (const void**)__tmp; - if (_len_waiters % sizeof(*waiters) != 0) { - sgx_ocfree(); - return SGX_ERROR_INVALID_PARAMETER; - } - if (memcpy_s(__tmp, ocalloc_size, waiters, _len_waiters)) { - sgx_ocfree(); - return SGX_ERROR_UNEXPECTED; - } - __tmp = (void *)((size_t)__tmp + _len_waiters); - ocalloc_size -= _len_waiters; - } else { - ms->ms_waiters = NULL; - } - - ms->ms_total = total; - status = sgx_ocall(59, ms); - - if (status == SGX_SUCCESS) { - if (retval) *retval = ms->ms_retval; - } - sgx_ocfree(); - return status; -} - diff --git a/enclave/hello-rust/enclave/Enclave_t.h b/enclave/hello-rust/enclave/Enclave_t.h deleted file mode 100644 index 8a78269..0000000 --- a/enclave/hello-rust/enclave/Enclave_t.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef ENCLAVE_T_H__ -#define ENCLAVE_T_H__ - -#include -#include -#include -#include "sgx_edger8r.h" /* for sgx_ocall etc. */ - -#include "time.h" -#include "inc/stat.h" -#include "sys/uio.h" -#include "inc/stat.h" -#include "inc/dirent.h" - -#include /* for size_t */ - -#define SGX_CAST(type, item) ((type)(item)) - -#ifdef __cplusplus -extern "C" { -#endif - -sgx_status_t say_something(const uint8_t* some_string, size_t len); -void t_global_init_ecall(uint64_t id, const uint8_t* path, size_t len); -void t_global_exit_ecall(void); - -sgx_status_t SGX_CDECL u_thread_set_event_ocall(int* retval, int* error, const void* tcs); -sgx_status_t SGX_CDECL u_thread_wait_event_ocall(int* retval, int* error, const void* tcs, const struct timespec* timeout); -sgx_status_t SGX_CDECL u_thread_set_multiple_events_ocall(int* retval, int* error, const void** tcss, int total); -sgx_status_t SGX_CDECL u_thread_setwait_events_ocall(int* retval, int* error, const void* waiter_tcs, const void* self_tcs, const struct timespec* timeout); -sgx_status_t SGX_CDECL u_clock_gettime_ocall(int* retval, int* error, int clk_id, struct timespec* tp); -sgx_status_t SGX_CDECL u_read_ocall(size_t* retval, int* error, int fd, void* buf, size_t count); -sgx_status_t SGX_CDECL u_pread64_ocall(size_t* retval, int* error, int fd, void* buf, size_t count, int64_t offset); -sgx_status_t SGX_CDECL u_readv_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt); -sgx_status_t SGX_CDECL u_preadv64_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset); -sgx_status_t SGX_CDECL u_write_ocall(size_t* retval, int* error, int fd, const void* buf, size_t count); -sgx_status_t SGX_CDECL u_pwrite64_ocall(size_t* retval, int* error, int fd, const void* buf, size_t count, int64_t offset); -sgx_status_t SGX_CDECL u_writev_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt); -sgx_status_t SGX_CDECL u_pwritev64_ocall(size_t* retval, int* error, int fd, const struct iovec* iov, int iovcnt, int64_t offset); -sgx_status_t SGX_CDECL u_fcntl_arg0_ocall(int* retval, int* error, int fd, int cmd); -sgx_status_t SGX_CDECL u_fcntl_arg1_ocall(int* retval, int* error, int fd, int cmd, int arg); -sgx_status_t SGX_CDECL u_ioctl_arg0_ocall(int* retval, int* error, int fd, int request); -sgx_status_t SGX_CDECL u_ioctl_arg1_ocall(int* retval, int* error, int fd, int request, int* arg); -sgx_status_t SGX_CDECL u_close_ocall(int* retval, int* error, int fd); -sgx_status_t SGX_CDECL u_malloc_ocall(void** retval, int* error, size_t size); -sgx_status_t SGX_CDECL u_free_ocall(void* p); -sgx_status_t SGX_CDECL u_mmap_ocall(void** retval, int* error, void* start, size_t length, int prot, int flags, int fd, int64_t offset); -sgx_status_t SGX_CDECL u_munmap_ocall(int* retval, int* error, void* start, size_t length); -sgx_status_t SGX_CDECL u_msync_ocall(int* retval, int* error, void* addr, size_t length, int flags); -sgx_status_t SGX_CDECL u_mprotect_ocall(int* retval, int* error, void* addr, size_t length, int prot); -sgx_status_t SGX_CDECL u_open_ocall(int* retval, int* error, const char* pathname, int flags); -sgx_status_t SGX_CDECL u_open64_ocall(int* retval, int* error, const char* path, int oflag, int mode); -sgx_status_t SGX_CDECL u_fstat_ocall(int* retval, int* error, int fd, struct stat_t* buf); -sgx_status_t SGX_CDECL u_fstat64_ocall(int* retval, int* error, int fd, struct stat64_t* buf); -sgx_status_t SGX_CDECL u_stat_ocall(int* retval, int* error, const char* path, struct stat_t* buf); -sgx_status_t SGX_CDECL u_stat64_ocall(int* retval, int* error, const char* path, struct stat64_t* buf); -sgx_status_t SGX_CDECL u_lstat_ocall(int* retval, int* error, const char* path, struct stat_t* buf); -sgx_status_t SGX_CDECL u_lstat64_ocall(int* retval, int* error, const char* path, struct stat64_t* buf); -sgx_status_t SGX_CDECL u_lseek_ocall(uint64_t* retval, int* error, int fd, int64_t offset, int whence); -sgx_status_t SGX_CDECL u_lseek64_ocall(int64_t* retval, int* error, int fd, int64_t offset, int whence); -sgx_status_t SGX_CDECL u_ftruncate_ocall(int* retval, int* error, int fd, int64_t length); -sgx_status_t SGX_CDECL u_ftruncate64_ocall(int* retval, int* error, int fd, int64_t length); -sgx_status_t SGX_CDECL u_truncate_ocall(int* retval, int* error, const char* path, int64_t length); -sgx_status_t SGX_CDECL u_truncate64_ocall(int* retval, int* error, const char* path, int64_t length); -sgx_status_t SGX_CDECL u_fsync_ocall(int* retval, int* error, int fd); -sgx_status_t SGX_CDECL u_fdatasync_ocall(int* retval, int* error, int fd); -sgx_status_t SGX_CDECL u_fchmod_ocall(int* retval, int* error, int fd, uint32_t mode); -sgx_status_t SGX_CDECL u_unlink_ocall(int* retval, int* error, const char* pathname); -sgx_status_t SGX_CDECL u_link_ocall(int* retval, int* error, const char* oldpath, const char* newpath); -sgx_status_t SGX_CDECL u_rename_ocall(int* retval, int* error, const char* oldpath, const char* newpath); -sgx_status_t SGX_CDECL u_chmod_ocall(int* retval, int* error, const char* path, uint32_t mode); -sgx_status_t SGX_CDECL u_readlink_ocall(size_t* retval, int* error, const char* path, char* buf, size_t bufsz); -sgx_status_t SGX_CDECL u_symlink_ocall(int* retval, int* error, const char* path1, const char* path2); -sgx_status_t SGX_CDECL u_realpath_ocall(char** retval, int* error, const char* pathname); -sgx_status_t SGX_CDECL u_mkdir_ocall(int* retval, int* error, const char* pathname, uint32_t mode); -sgx_status_t SGX_CDECL u_rmdir_ocall(int* retval, int* error, const char* pathname); -sgx_status_t SGX_CDECL u_opendir_ocall(void** retval, int* error, const char* pathname); -sgx_status_t SGX_CDECL u_readdir64_r_ocall(int* retval, void* dirp, struct dirent64_t* entry, struct dirent64_t** result); -sgx_status_t SGX_CDECL u_closedir_ocall(int* retval, int* error, void* dirp); -sgx_status_t SGX_CDECL u_dirfd_ocall(int* retval, int* error, void* dirp); -sgx_status_t SGX_CDECL u_fstatat64_ocall(int* retval, int* error, int dirfd, const char* pathname, struct stat64_t* buf, int flags); -sgx_status_t SGX_CDECL sgx_oc_cpuidex(int cpuinfo[4], int leaf, int subleaf); -sgx_status_t SGX_CDECL sgx_thread_wait_untrusted_event_ocall(int* retval, const void* self); -sgx_status_t SGX_CDECL sgx_thread_set_untrusted_event_ocall(int* retval, const void* waiter); -sgx_status_t SGX_CDECL sgx_thread_setwait_untrusted_events_ocall(int* retval, const void* waiter, const void* self); -sgx_status_t SGX_CDECL sgx_thread_set_multiple_untrusted_events_ocall(int* retval, const void** waiters, size_t total); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/enclave/safetrace/Makefile b/enclave/safetrace/Makefile index 0a96b90..1b5440d 100644 --- a/enclave/safetrace/Makefile +++ b/enclave/safetrace/Makefile @@ -135,7 +135,6 @@ $(Enclave_EDL_Files): $(SGX_EDGER8R) enclave/Enclave.edl # Untrusted EDL object app/Enclave_u.o: $(Enclave_EDL_Files) - @cd app && cargo build -p enigma-types $(App_Rust_Flags) @$(CC) $(App_C_Flags) -c app/Enclave_u.c -o $@ @echo "CC <= $<" diff --git a/enclave/safetrace/app/Cargo.toml b/enclave/safetrace/app/Cargo.toml index 7b1c1d2..007cf63 100644 --- a/enclave/safetrace/app/Cargo.toml +++ b/enclave/safetrace/app/Cargo.toml @@ -7,8 +7,6 @@ build = "build.rs" [dependencies] sgx_types = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } sgx_urts = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } -enigma-types = { path = "../../enigma-types", features = ["std"] } - futures = { version = "0.1.25", default-features = false } tokio-zmq = "0.9.0" @@ -20,7 +18,6 @@ serde_repr = "0.1" rustc-hex = "1.0.0" # 2.0.1? rmp-serde = "0.14.0" - [patch.'https://github.com/apache/teaclave-sgx-sdk.git'] sgx_types = { path = "../../incubator-teaclave-sgx-sdk/sgx_types" } sgx_urts = { path = "../../incubator-teaclave-sgx-sdk/sgx_urts" } diff --git a/enclave/safetrace/app/src/common_u/errors.rs b/enclave/safetrace/app/src/common_u/errors.rs index 14e37b5..688138d 100644 --- a/enclave/safetrace/app/src/common_u/errors.rs +++ b/enclave/safetrace/app/src/common_u/errors.rs @@ -1,4 +1,5 @@ #![allow(dead_code)] +use crate::enigma_types::types::*; use sgx_types::*; use std::fmt; use failure::Error; @@ -81,6 +82,6 @@ impl fmt::Display for DBErrKind { #[derive(Fail, Debug)] #[fail(display = "Error inside the Enclave = ({:?})", err)] pub struct EnclaveFailError { - pub err: enigma_types::EnclaveReturn, + pub err: EnclaveReturn, pub status: sgx_status_t, } diff --git a/enclave/enigma-types/src/hash.rs b/enclave/safetrace/app/src/enigma_types/hash.rs similarity index 100% rename from enclave/enigma-types/src/hash.rs rename to enclave/safetrace/app/src/enigma_types/hash.rs diff --git a/enclave/enigma-types/src/lib.rs b/enclave/safetrace/app/src/enigma_types/lib.rs similarity index 100% rename from enclave/enigma-types/src/lib.rs rename to enclave/safetrace/app/src/enigma_types/lib.rs diff --git a/enclave/safetrace/app/src/enigma_types/mod.rs b/enclave/safetrace/app/src/enigma_types/mod.rs new file mode 100644 index 0000000..0bc8eda --- /dev/null +++ b/enclave/safetrace/app/src/enigma_types/mod.rs @@ -0,0 +1,2 @@ +pub mod types; +pub mod traits; diff --git a/enclave/enigma-types/src/traits.rs b/enclave/safetrace/app/src/enigma_types/traits.rs similarity index 100% rename from enclave/enigma-types/src/traits.rs rename to enclave/safetrace/app/src/enigma_types/traits.rs diff --git a/enclave/enigma-types/src/types.rs b/enclave/safetrace/app/src/enigma_types/types.rs similarity index 55% rename from enclave/enigma-types/src/types.rs rename to enclave/safetrace/app/src/enigma_types/types.rs index 08dc3c6..e76e6d6 100644 --- a/enclave/enigma-types/src/types.rs +++ b/enclave/safetrace/app/src/enigma_types/types.rs @@ -9,9 +9,8 @@ //! Note: Please use the right types even if they're only aliases right now, //! this helps both for readability and if in the future we decide to change the alias. -use core::{fmt, mem, ptr, default::Default}; +// use core::{fmt, mem, ptr, default::Default}; -pub use crate::hash::Hash256; /// The size of the symmetric 256 bit key we use for encryption (in bytes). pub const SYMMETRIC_KEY_SIZE: usize = 256 / 8; /// symmetric key we use for encryption. @@ -20,8 +19,7 @@ pub type SymmetricKey = [u8; SYMMETRIC_KEY_SIZE]; pub type StateKey = SymmetricKey; /// DHKey is the key that results from the ECDH [`enigma_crypto::KeyPair::derive_key`](../replace_me) pub type DhKey = SymmetricKey; -/// ContractAddress is the address of contracts in the Enigma Network. -pub type ContractAddress = Hash256; + /// PubKey is a public key that is used for ECDSA signing. pub type PubKey = [u8; 64]; @@ -100,71 +98,71 @@ pub struct ExecuteResult { pub used_gas: u64, } -/// This struct is a wrapper to a raw pointer. -/// when you pass a pointer through the SGX bridge(EDL) the SGX Edger8r will copy the data that it's pointing to -/// using `memalloc` and `memset` to the other side of the bridge, then it changes the pointer to point to the new data. -/// -/// So this struct is needed if you want to pass a pointer from one side to the other while the pointer still points to the right locaiton. -/// -/// Say you want to give the enclave a DB on the untrusted, so that the enclave can then pass that pointer to an ocall. -/// This will let you do it without the Edger8r messing with the pointer. -/// -/// And I tried to add a mutability bool to make it a little more safe by giving you a pointer based on the original mutability. -#[repr(C)] -#[derive(Clone, Copy, Debug)] -pub struct RawPointer { - ptr: *const u8, - _mut: bool -} +// /// This struct is a wrapper to a raw pointer. +// /// when you pass a pointer through the SGX bridge(EDL) the SGX Edger8r will copy the data that it's pointing to +// /// using `memalloc` and `memset` to the other side of the bridge, then it changes the pointer to point to the new data. +// /// +// /// So this struct is needed if you want to pass a pointer from one side to the other while the pointer still points to the right locaiton. +// /// +// /// Say you want to give the enclave a DB on the untrusted, so that the enclave can then pass that pointer to an ocall. +// /// This will let you do it without the Edger8r messing with the pointer. +// /// +// /// And I tried to add a mutability bool to make it a little more safe by giving you a pointer based on the original mutability. +// #[repr(C)] +// #[derive(Clone, Copy, Debug)] +// pub struct RawPointer { +// ptr: *const u8, +// _mut: bool +// } -impl RawPointer { - /// Creates a new RawPointer wrapper. - /// it will auto cast the reference into a raw pointer. - pub unsafe fn new(reference: &T) -> Self { - RawPointer { ptr: reference as *const T as *const u8, _mut: false } - } +// impl RawPointer { +// /// Creates a new RawPointer wrapper. +// /// it will auto cast the reference into a raw pointer. +// pub unsafe fn new(reference: &T) -> Self { +// RawPointer { ptr: reference as *const T as *const u8, _mut: false } +// } - /// Creates a new mutable RawPointer wrapper. - /// This is needed if when you unwrap this you want a mutable pointer. - pub unsafe fn new_mut(reference: &mut T) -> Self { - RawPointer { ptr: reference as *mut T as *const u8, _mut: true } - } +// /// Creates a new mutable RawPointer wrapper. +// /// This is needed if when you unwrap this you want a mutable pointer. +// pub unsafe fn new_mut(reference: &mut T) -> Self { +// RawPointer { ptr: reference as *mut T as *const u8, _mut: true } +// } - /// This will return the underlying const raw pointer. - pub fn get_ptr(&self) -> *const T { - self.ptr as *const T - } +// /// This will return the underlying const raw pointer. +// pub fn get_ptr(&self) -> *const T { +// self.ptr as *const T +// } - /// this will return a Result and if the RawPointer was created with `new_mut` - /// it Will return `Ok` with the underlying mut raw pointer. - /// if the struct was created with just `new` it will return `Err`. - pub fn get_mut_ptr(&self) -> Result<*mut T, &'static str> { - if !self._mut { - Err("This DoublePointer is not mutable") - } else { - Ok(self.ptr as *mut T) - } - } +// /// this will return a Result and if the RawPointer was created with `new_mut` +// /// it Will return `Ok` with the underlying mut raw pointer. +// /// if the struct was created with just `new` it will return `Err`. +// pub fn get_mut_ptr(&self) -> Result<*mut T, &'static str> { +// if !self._mut { +// Err("This DoublePointer is not mutable") +// } else { +// Ok(self.ptr as *mut T) +// } +// } - /// This will unsafely cast the underlying pointer back into a reference. - pub unsafe fn get_ref(&self) -> &T { - &*(self.ptr as *const T) - } +// /// This will unsafely cast the underlying pointer back into a reference. +// pub unsafe fn get_ref(&self) -> &T { +// &*(self.ptr as *const T) +// } - /// This will unsafely cast the underlying pointer back into a mut pointer. - /// it will return a result and have the same rules as [`get_mut_ptr`] - /// - /// [`get_mut_ptr`]: #method.get_mut_ptr - pub unsafe fn get_mut_ref(&self) -> Result<&mut T, &'static str> { - if !self._mut { - Err("This DoublePointer is not mutable") - } else { - Ok(&mut *(self.ptr as *mut T) ) - } - } +// /// This will unsafely cast the underlying pointer back into a mut pointer. +// /// it will return a result and have the same rules as [`get_mut_ptr`] +// /// +// /// [`get_mut_ptr`]: #method.get_mut_ptr +// pub unsafe fn get_mut_ref(&self) -> Result<&mut T, &'static str> { +// if !self._mut { +// Err("This DoublePointer is not mutable") +// } else { +// Ok(&mut *(self.ptr as *mut T) ) +// } +// } -} +// } impl From for ResultStatus { fn from(i: bool) -> Self { @@ -176,58 +174,58 @@ impl From for ResultStatus { } } -impl Default for ExecuteResult { - fn default() -> ExecuteResult { - ExecuteResult { - output: ptr::null(), - delta_ptr: ptr::null(), - ethereum_payload_ptr: ptr::null(), - .. unsafe { mem::zeroed() } - } - } -} +// impl Default for ExecuteResult { +// fn default() -> ExecuteResult { +// ExecuteResult { +// output: ptr::null(), +// delta_ptr: ptr::null(), +// ethereum_payload_ptr: ptr::null(), +// .. unsafe { mem::zeroed() } +// } +// } +// } -impl fmt::Debug for ExecuteResult { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut debug_trait_builder = f.debug_struct("ExecuteResult"); - debug_trait_builder.field("output", &(self.output)); - debug_trait_builder.field("delta_ptr", &(self.delta_ptr)); - debug_trait_builder.field("delta_index", &(self.delta_index)); - debug_trait_builder.field("ethereum_payload_ptr", &(self.ethereum_payload_ptr)); - debug_trait_builder.field("ethereum_address", &(self.ethereum_address)); - debug_trait_builder.field("signature", &(&self.signature[..])); - debug_trait_builder.field("used_gas", &(self.used_gas)); - debug_trait_builder.finish() - } -} +// impl fmt::Debug for ExecuteResult { +// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +// let mut debug_trait_builder = f.debug_struct("ExecuteResult"); +// debug_trait_builder.field("output", &(self.output)); +// debug_trait_builder.field("delta_ptr", &(self.delta_ptr)); +// debug_trait_builder.field("delta_index", &(self.delta_index)); +// debug_trait_builder.field("ethereum_payload_ptr", &(self.ethereum_payload_ptr)); +// debug_trait_builder.field("ethereum_address", &(self.ethereum_address)); +// debug_trait_builder.field("signature", &(&self.signature[..])); +// debug_trait_builder.field("used_gas", &(self.used_gas)); +// debug_trait_builder.finish() +// } +// } impl Default for EnclaveReturn { fn default() -> EnclaveReturn { EnclaveReturn::Success } } -impl fmt::Display for EnclaveReturn { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use self::EnclaveReturn::*; - let p = match *self { - Success => "EnclaveReturn: Success", - TaskFailure => "EnclaveReturn: Task failure", - KeysError => "EnclaveReturn: KeysError", - EncryptionError => "EnclaveReturn: EncryptionError", - SigningError => "EnclaveReturn: SigningError", - RecoveringError => "EnclaveReturn: RecoveringError", - PermissionError => "EnclaveReturn: PermissionError", - SgxError => "EnclaveReturn: SgxError", - StateError => "EnclaveReturn: StateError", - OcallError => "EnclaveReturn: OcallError", - OcallDBError => "EnclaveReturn: OcallDBError", - MessagingError => "EnclaveReturn: MessagingError", - WorkerAuthError => "EnclaveReturn: WorkerAuthError", - KeyProvisionError => "EnclaveReturn: KeyProvisionError", - Other => "EnclaveReturn: Other", - }; - write!(f, "{}", p) - } -} +// impl fmt::Display for EnclaveReturn { +// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +// use self::EnclaveReturn::*; +// let p = match *self { +// Success => "EnclaveReturn: Success", +// TaskFailure => "EnclaveReturn: Task failure", +// KeysError => "EnclaveReturn: KeysError", +// EncryptionError => "EnclaveReturn: EncryptionError", +// SigningError => "EnclaveReturn: SigningError", +// RecoveringError => "EnclaveReturn: RecoveringError", +// PermissionError => "EnclaveReturn: PermissionError", +// SgxError => "EnclaveReturn: SgxError", +// StateError => "EnclaveReturn: StateError", +// OcallError => "EnclaveReturn: OcallError", +// OcallDBError => "EnclaveReturn: OcallDBError", +// MessagingError => "EnclaveReturn: MessagingError", +// WorkerAuthError => "EnclaveReturn: WorkerAuthError", +// KeyProvisionError => "EnclaveReturn: KeyProvisionError", +// Other => "EnclaveReturn: Other", +// }; +// write!(f, "{}", p) +// } +// } /// This trait will convert a Result into EnclaveReturn. diff --git a/enclave/safetrace/app/src/keys_u.rs b/enclave/safetrace/app/src/keys_u.rs index 8059cf4..2217c69 100644 --- a/enclave/safetrace/app/src/keys_u.rs +++ b/enclave/safetrace/app/src/keys_u.rs @@ -1,8 +1,7 @@ use crate::common_u::errors::EnclaveFailError; -use enigma_types::{EnclaveReturn, PubKey}; use failure::Error; use sgx_types::{sgx_enclave_id_t, sgx_status_t}; -//use enigma_types::{EnclaveReturn, PubKey, RawPointer}; +use crate::enigma_types::types::{EnclaveReturn}; extern { pub fn ecall_get_user_key( @@ -15,7 +14,7 @@ extern { } -pub fn get_user_key(eid: sgx_enclave_id_t, user_pubkey: &PubKey) -> Result<(Box<[u8]>, [u8; 65]), Error> { +pub fn get_user_key(eid: sgx_enclave_id_t, user_pubkey: &[u8; 64]) -> Result<(Box<[u8]>, [u8; 65]), Error> { let mut sig = [0u8; 65]; let mut ret = EnclaveReturn::Success; let mut serialized_ptr = 0u64; diff --git a/enclave/safetrace/app/src/lib.rs b/enclave/safetrace/app/src/lib.rs deleted file mode 100644 index d98c0fb..0000000 --- a/enclave/safetrace/app/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -pub extern crate sgx_types; -pub extern crate futures; -extern crate tokio_zmq; -extern crate zmq; -#[macro_use] -extern crate failure; -#[macro_use] -extern crate serde; -extern crate serde_repr; -pub extern crate serde_json; -extern crate rmp_serde; -extern crate rustc_hex as hex; -extern crate enigma_types; - - - -pub mod common_u; -pub mod networking; -pub mod keys_u; diff --git a/enclave/safetrace/app/src/main.rs b/enclave/safetrace/app/src/main.rs index e611c2c..2b2fb9e 100644 --- a/enclave/safetrace/app/src/main.rs +++ b/enclave/safetrace/app/src/main.rs @@ -15,20 +15,34 @@ // specific language governing permissions and limitations // under the License.. -extern crate safetrace_app; extern crate sgx_types; extern crate sgx_urts; +pub extern crate futures; +extern crate tokio_zmq; +extern crate zmq; +#[macro_use] +extern crate failure; +#[macro_use] +extern crate serde; +extern crate serde_repr; +pub extern crate serde_json; +extern crate rmp_serde; +extern crate rustc_hex as hex; -pub use safetrace_app::*; use sgx_types::*; use sgx_urts::SgxEnclave; +pub mod enigma_types; +pub mod common_u; +pub mod keys_u; +pub mod networking; +pub mod ocalls_u; + use networking::{ipc_listener, IpcListener}; use futures::Future; - - +pub use ocalls_u::{ocall_save_to_memory}; static ENCLAVE_FILE: &'static str = "enclave.signed.so"; diff --git a/enclave/safetrace/app/src/networking/ipc_listener.rs b/enclave/safetrace/app/src/networking/ipc_listener.rs index 3a41468..2fe52cb 100644 --- a/enclave/safetrace/app/src/networking/ipc_listener.rs +++ b/enclave/safetrace/app/src/networking/ipc_listener.rs @@ -1,10 +1,11 @@ use crate::networking::messages::*; -use sgx_types::sgx_enclave_id_t; +use sgx_types::{sgx_enclave_id_t, sgx_status_t}; use futures::{Future, Stream}; use std::sync::Arc; use tokio_zmq::prelude::*; use tokio_zmq::{Error, Multipart, Rep}; + pub struct IpcListener { _context: Arc, rep_future: Box>, @@ -27,7 +28,6 @@ impl IpcListener { } } -//pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, retries: u32) -> Multipart { pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, retries: u32) -> Multipart { let mut responses = Multipart::new(); for msg in request { @@ -45,22 +45,35 @@ pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, ret responses } + pub(self) mod handling { use crate::networking::messages::*; use crate::keys_u; use failure::Error; - use sgx_types::sgx_enclave_id_t; + use sgx_types::{sgx_enclave_id_t, sgx_status_t}; use hex::{FromHex, ToHex}; use std::str; - use rmp_serde::Deserializer; use serde::Deserialize; use serde_json::Value; + extern { + fn ecall_add_personal_data( + eid: sgx_enclave_id_t, + ret: *mut sgx_status_t, + encryptedUserId: *const u8, + encryptedUserId_len: usize, + encryptedData: *const u8, + encryptedData_len: usize, + userPubKey: &[u8; 64]) -> sgx_status_t; + } type ResponseResult = Result; - // TODO - //pub fn get_enclave_report(eid: sgx_enclave_id_t, spid: &str, retries: u32) -> ResponseResult { + #[derive(Serialize, Deserialize)] + struct PubkeyResult { + pubkey: Vec + } + pub fn get_enclave_report(eid: sgx_enclave_id_t, spid: &str, retries: u32) -> ResponseResult { let result = IpcResults::EnclaveReport { spid: spid.to_string() }; Ok(IpcResponse::GetEnclaveReport { result }) @@ -68,34 +81,54 @@ pub(self) mod handling { // TODO //#[logfn(TRACE)] - //pub fn new_task_encryption_key(_user_pubkey: &str, eid: sgx_enclave_id_t) -> ResponseResult { pub fn new_task_encryption_key(_user_pubkey: &str, eid: sgx_enclave_id_t) -> ResponseResult { let mut user_pubkey = [0u8; 64]; user_pubkey.clone_from_slice(&_user_pubkey.from_hex().unwrap()); let (msg, sig) = keys_u::get_user_key(eid, &user_pubkey)?; - let mut des = Deserializer::new(&msg[..]); - let res: Value = Deserialize::deserialize(&mut des).unwrap(); - let pubkey = serde_json::from_value::>(res["pubkey"].clone())?; + // Enigma-core implementation used MessagePack, but rmp-serde is not available + // so replaced MessagePack serialization with plain JSON serialization + //let mut des = Deserializer::new(&msg[..]); + //let res: Value = Deserialize::deserialize(&mut des).unwrap(); + //let pubkey = serde_json::from_value::>(res["pubkey"].clone())?; + //let pubkey = serde_json::from_slice::>(&msg)?; + let res = match str::from_utf8(&msg) { + Ok(v) => v, + Err(e) => panic!("Invalid UTF-8 sequence: {}", e), + }; + + let pubkey: PubkeyResult = serde_json::from_str(res)?; - let result = IpcResults::DHKey {dh_key: pubkey.to_hex(), sig: sig.to_hex() }; - //let result = IpcResults::DHKey {dh_key: _user_pubkey.to_string(), sig: _user_pubkey.to_string()}; + let result = IpcResults::DHKey {taskPubKey: pubkey.pubkey.to_hex(), sig: sig.to_hex() }; Ok(IpcResponse::NewTaskEncryptionKey { result }) } // TODO //#[logfn(DEBUG)] - // pub fn compute_task(db: &mut DB, input: IpcTask, eid: sgx_enclave_id_t) -> ResponseResult { pub fn add_personal_data( input: IpcInput, eid: sgx_enclave_id_t) -> ResponseResult { + + let mut ret = sgx_status_t::SGX_SUCCESS; + let encryptedUserId = input.encryptedUserId.from_hex()?; + let encryptedData = input.encryptedData.from_hex()?; + let mut userPubKey = [0u8; 64]; + userPubKey.clone_from_slice(&input.userPubKey.from_hex()?); + + unsafe { ecall_add_personal_data(eid, + &mut ret as *mut sgx_status_t, + encryptedUserId.as_ptr() as * const u8, + encryptedUserId.len(), + encryptedData.as_ptr() as * const u8, + encryptedData.len(), + &userPubKey) }; + let result = IpcResults::AddPersonalData { status: Status::Passed }; Ok(IpcResponse::AddPersonalData { result }) } // TODO //#[logfn(DEBUG)] - // pub fn compute_task(db: &mut DB, input: IpcTask, eid: sgx_enclave_id_t) -> ResponseResult { pub fn find_match( input: IpcInput, eid: sgx_enclave_id_t) -> ResponseResult { let result = IpcResults::FindMatch { status: Status::Passed }; Ok(IpcResponse::FindMatch { result }) diff --git a/enclave/safetrace/app/src/networking/messages.rs b/enclave/safetrace/app/src/networking/messages.rs index 8c612bb..843dcda 100644 --- a/enclave/safetrace/app/src/networking/messages.rs +++ b/enclave/safetrace/app/src/networking/messages.rs @@ -47,7 +47,7 @@ pub enum IpcResults { //EnclaveReport { #[serde(rename = "signingKey")] signing_key: String, report: String, signature: String }, EnclaveReport { spid: String }, #[serde(rename = "result")] - DHKey { dh_key: String, sig: String }, + DHKey { taskPubKey: String, sig: String }, AddPersonalData { status: Status }, FindMatch { status: Status }, } diff --git a/enclave/safetrace/app/src/ocalls_u.rs b/enclave/safetrace/app/src/ocalls_u.rs new file mode 100644 index 0000000..9a3538c --- /dev/null +++ b/enclave/safetrace/app/src/ocalls_u.rs @@ -0,0 +1,10 @@ +use std::{ptr, slice}; +use enigma_types::traits::SliceCPtr; +//use crate::esgx::general; + +#[no_mangle] +pub unsafe extern "C" fn ocall_save_to_memory(data_ptr: *const u8, data_len: usize) -> u64 { + let data = slice::from_raw_parts(data_ptr, data_len).to_vec(); + let ptr = Box::into_raw(Box::new(data.into_boxed_slice())) as *const u8; + ptr as u64 +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/Cargo.toml b/enclave/safetrace/enclave/Cargo.toml index 228f1db..6091e85 100644 --- a/enclave/safetrace/enclave/Cargo.toml +++ b/enclave/safetrace/enclave/Cargo.toml @@ -10,13 +10,25 @@ crate-type = ["staticlib"] [features] default = [] -[dependencies] -enigma-types = { path = "../../enigma-types", default-features = false, features = ["sgx"] } - [target.'cfg(not(target_env = "sgx"))'.dependencies] sgx_types = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } sgx_tstd = { git = "https://github.com/apache/teaclave-sgx-sdk.git", features = ["backtrace"] } sgx_trts = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } +sgx_rand = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } +sgx_tseal = { git = "https://github.com/apache/teaclave-sgx-sdk.git" } + +[dependencies] +arrayvec = { version = "0.4.10", default-features = false } +rustc-hex = { version = "2.0.1", default-features = false } +serde = { git = "https://github.com/mesalock-linux/serde-sgx", features = ["derive"] } +serde_json = { git = "https://github.com/mesalock-linux/serde-json-sgx" } +libsecp256k1 = { version = "0.2" } +lazy_static = {version = "1.3.0", features = ["spin_no_std"] } +tiny-keccak = { version = "1.4" } +sha2 = { version = "0.8.0", default-features = false} +ring = { git = "https://github.com/elichai/ring.git", rev = "sgx-manual", default-features = false } + + [patch.'https://github.com/apache/teaclave-sgx-sdk.git'] sgx_alloc = { path = "../../incubator-teaclave-sgx-sdk/sgx_alloc" } sgx_build_helper = { path = "../../incubator-teaclave-sgx-sdk/sgx_build_helper" } diff --git a/enclave/safetrace/enclave/Enclave.edl b/enclave/safetrace/enclave/Enclave.edl index c40477a..99f6a94 100644 --- a/enclave/safetrace/enclave/Enclave.edl +++ b/enclave/safetrace/enclave/Enclave.edl @@ -20,19 +20,27 @@ enclave { from "sgx_stdio.edl" import *; from "sgx_backtrace.edl" import *; from "sgx_tstdc.edl" import *; + from "sgx_fs.edl" import *; - /* data structures */ - include "enigma-types.h" trusted { /* define ECALLs here. */ - public sgx_status_t say_something([in, size=len] const uint8_t* some_string, size_t len); + public sgx_status_t ecall_add_personal_data( + [in, size=encryptedUserId_len] const uint8_t* encryptedUserId, + size_t encryptedUserId_len, + [in, size=encryptedData_len] const uint8_t* encryptedData, + size_t encryptedData_len, + [in] uint8_t user_key[64] + ); - public EnclaveReturn ecall_get_user_key( + public sgx_status_t ecall_get_user_key( [out] uint8_t sig[65], [in] uint8_t pubkey[64], [out] uint64_t* serialized_ptr ); }; + untrusted { + uint64_t ocall_save_to_memory([in, count=data_len] const uint8_t* data_ptr, size_t data_len); + }; }; diff --git a/enclave/safetrace/enclave/Makefile b/enclave/safetrace/enclave/Makefile index 231391a..5f41187 100644 --- a/enclave/safetrace/enclave/Makefile +++ b/enclave/safetrace/enclave/Makefile @@ -27,7 +27,6 @@ ifeq ($(XARGO_SGX), 1) RUST_TARGET_PATH=$(Rust_Target_Path) xargo build --target x86_64-unknown-linux-sgx --release cp ./target/x86_64-unknown-linux-sgx/release/libsafetraceenclave.a ../lib/libenclave.a else - cargo build -p enigma-types $(CARGO_FLAGS) # Meant to make sure `enigma-types.h` already exists and can be included. cargo build --release cp ./target/release/libsafetraceenclave.a ../lib/libenclave.a -endif \ No newline at end of file +endif diff --git a/enclave/safetrace/enclave/src/data.rs b/enclave/safetrace/enclave/src/data.rs new file mode 100644 index 0000000..f2a7f90 --- /dev/null +++ b/enclave/safetrace/enclave/src/data.rs @@ -0,0 +1,59 @@ +use serde::{Serialize, Deserialize}; +// use std::{slice}; +use std::string::String; +use errors_t::EnclaveError; +use types::{PubKey, DhKey}; + + +// Structs +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct GeolocationTime { + lat: i32, + lng: i32, + startTS: i32, + endTS: i32 +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct Request { + encryptedUserId: String, + encryptedData: String, + userPubKey: String +} + +pub fn ecall_add_personal_data_internal( + encryptedUserId: &[u8], + encryptedData: &[u8], + userPubKey: &PubKey, + dhKey: &DhKey) -> Result<(), EnclaveError> { + + + println!("Add personal data inside the enclave"); + + println!("{:?}", dhKey); + println!("Received UserPub Key Again: {:?}", userPubKey.to_vec()); + + + // // let str_slice = unsafe { slice::from_raw_parts(data_json, some_len) }; + + // // Input sanitised in EngimaJS to object type + // let mut request: Request = serde_json::from_slice(str_slice).unwrap(); + + // println!("EncryptedUserId: {:?}", request.encryptedUserId); + + // let inputkey = request.userPubKey; + + + + // Read from the state + // let mut data = Self::get_data(); + // Append + // data.append(&mut array); + // Write back to the state + // write_state!(DATASET => data); + + // Ocall to normal world for output + //println!("Received Data: {:?}", &request); + + Ok(()) +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/errors_t.rs b/enclave/safetrace/enclave/src/errors_t.rs new file mode 100644 index 0000000..9dc827d --- /dev/null +++ b/enclave/safetrace/enclave/src/errors_t.rs @@ -0,0 +1,364 @@ +use types::{EnclaveReturn, ResultToEnclaveReturn}; +//use types::{EnclaveReturn, ResultToEnclaveReturn}; +// use enigma_tools_m::ToolsError; +// use json_patch; +// use pwasm_utils as wasm_utils; +use sgx_types::sgx_status_t; +// use enigma_crypto::CryptoError; +use std::str; +use std::string::{String, ToString}; +// use wasmi::{self, TrapKind}; +// use parity_wasm; + +// use failure::Fail; +// use crate::localstd::fmt; + +// // Error of WASM execution by wasmi or runtime +// #[derive(Debug)] +// pub enum WasmError { +// GasLimit, +// WasmiError(wasmi::Error), +// EnclaveError(EnclaveError), +// } + +// // Trait that allows to return custom error from execution of wasmi +// impl wasmi::HostError for WasmError {} + +// // Implementation of Display is required by wasmi::HostError +// impl ::std::fmt::Display for WasmError { +// fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::result::Result<(), ::std::fmt::Error> { +// match self { +// WasmError::GasLimit => write!(f, "Invocation resulted in gas limit violated"), +// WasmError::WasmiError(ref e) => write!(f, "{}", e), +// WasmError::EnclaveError(ref e) => write!(f, "{}", e), +// } +// } +// } + +// // This is for call to wasmi functions from eng runtime +// // Here the wasmi::Error exact type is lost and the error description may be not so clear +// // It seems to be enough for now since the only wasmi functions called from eng runtime are: +// // memory manipulation function. +// impl From for WasmError { +// fn from(e: wasmi::Error) -> Self { +// WasmError::WasmiError(e) +// } +// } + +// // This is for extracting arguments in eng runtime +// // Implemented by wasmi in `nth_checked` function +// impl From for WasmError { +// fn from(trap: wasmi::Trap) -> Self { WasmError::WasmiError(wasmi::Error::Trap(trap)) } +// } + +// // This is for any call from eng runtime to core function +// // The EnclaveError is converted to WasmError::EnclaveError to ve extracted later as is +// impl From for WasmError { +// fn from(err: EnclaveError) -> Self { +// WasmError::EnclaveError(err) +// } +// } + +// impl From for EnclaveError { +// fn from(err: parity_wasm::elements::Error) -> EnclaveError { +// EnclaveError::FailedTaskError(FailedTaskError::WasmModuleCreationError { code: "deserialization into WASM module".to_string(), err: err.to_string() }) +// } +// } + +// impl From for EnclaveError { +// fn from(err: parity_wasm::elements::Module) -> EnclaveError { +// EnclaveError::FailedTaskError(FailedTaskError::WasmModuleCreationError { code: "injecting gas counter".to_string(), err: format!("{:?}", err) }) +// } +// } + +// impl From for EnclaveError { +// fn from(err: wasm_utils::stack_height::Error) -> EnclaveError { +// EnclaveError::FailedTaskError(FailedTaskError::WasmModuleCreationError { code: "injecting stack height limiter".to_string(), err: format!("{:?}", err) }) +// } +// } + +// // This is for final conversion from the result of wasmi execution to core result +// impl From for EnclaveError{ +// fn from(e: wasmi::Error) -> Self { +// match e { +// wasmi::Error::Trap(kind) => { +// match kind.kind() { +// TrapKind::Host(t) => { +// match (**t).downcast_ref::() +// .expect("Failed to downcast to expected error type"){ +// WasmError::GasLimit => EnclaveError::FailedTaskError(FailedTaskError::GasLimitError), +// WasmError::WasmiError(e) => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError { err: format!("{}", e) }), +// WasmError::EnclaveError(err) => err.clone(), +// } +// }, +// TrapKind::Unreachable => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "unreachable".to_string() }), +// TrapKind::MemoryAccessOutOfBounds => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "memory access out of bounds".to_string() }), +// TrapKind::TableAccessOutOfBounds | TrapKind::ElemUninitialized => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "table access out of bounds".to_string() }), +// TrapKind::DivisionByZero => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "division by zero".to_string() }), +// TrapKind::InvalidConversionToInt => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "invalid conversion to int".to_string() }), +// TrapKind::UnexpectedSignature => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "unexpected signature".to_string() }), +// TrapKind::StackOverflow => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError{ err: "stack overflow".to_string() }), +// } +// } +// _ => EnclaveError::FailedTaskError(FailedTaskError::WasmCodeExecutionError { err: e.to_string() }) +// } +// } +// } + +#[derive(Debug, Clone)] +pub enum EnclaveError { + FailedTaskError(FailedTaskError), + FailedTaskErrorWithGas { + used_gas: u64, + err: FailedTaskError + }, + SystemError(EnclaveSystemError) +} + +impl ::std::fmt::Display for EnclaveError { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::result::Result<(), ::std::fmt::Error> { + match self { + EnclaveError::FailedTaskError(ref e) => write!(f, "{:?}", e), + EnclaveError::FailedTaskErrorWithGas{err, ..} => write!(f, "{:?}", err), + EnclaveError::SystemError(ref e) => write!(f, "{:?}", e), + } + } +} + +//#[derive(Debug, Fail, Clone)] +#[derive(Debug, Clone)] +pub enum FailedTaskError { +// #[fail(display = "Input Error: {}", message)] + InputError { message: String }, + +// #[fail(display = "Error in execution of {}: {}", code, err)] + WasmModuleCreationError { code: String, err: String }, + +// #[fail(display = "Error in execution of WASM code: {}", err)] + WasmCodeExecutionError { err: String}, + +// #[fail(display = "Invocation resulted in gas limit violated")] + GasLimitError, + +// #[fail(display = "Error in EVM: {}", err)] + EvmError { err: String }, +} + +//#[derive(Debug, Fail, Clone)] +#[derive(Debug, Clone)] +pub enum EnclaveSystemError { + // #[fail(display = "Cryptography Error: {:?}", err)] + CryptoError { err: CryptoError }, + +// #[fail(display = "There's no sufficient permissions to read this file: {}", file)] + PermissionError { file: String }, + +// #[fail(display = "An SGX Error has occurred: {}, Description: {}", err, description)] + SgxError { err: String, description: String }, + +// #[fail(display = "There's a State error with: {}", err)] + StateError { err: String }, + +// #[fail(display = "There's an error with the ocall: {}; {}", command, err)] + OcallError { command: String, err: String }, + +// #[fail(display = "There's an error with the messaging: {}", err)] + MessagingError { err: String }, + + // #[fail(display = "Failed to authenticate the worker: {}", err)] + // WorkerAuthError { err: String }, + + // #[fail(display = "Failed to provide state key: {}", err)] + // KeyProvisionError { err: String }, +} + +impl From for EnclaveError { + fn from(err: CryptoError) -> EnclaveError { + EnclaveError::SystemError(EnclaveSystemError::CryptoError { err }) + } +} + +impl From for EnclaveError { + fn from(err: ToolsError) -> Self { + match err { + ToolsError::MessagingError {err} => EnclaveError::SystemError(EnclaveSystemError::MessagingError { err: err.to_string() }) + } + } +} + +impl From for EnclaveError { + fn from(err: sgx_status_t) -> EnclaveError { + EnclaveError::SystemError(EnclaveSystemError::SgxError { err: err.as_str().to_string(), description: err.__description().to_string() }) + } +} + +// impl From for EnclaveError { +// fn from(err: rmp_serde::decode::Error) -> EnclaveError { +// EnclaveError::SystemError(EnclaveSystemError::StateError { err: format!("{:?}", err) }) +// } +// } + +// impl From for EnclaveError { +// fn from(err: rmp_serde::encode::Error) -> EnclaveError { +// EnclaveError::SystemError(EnclaveSystemError::StateError { err: format!("{:?}", err) }) +// } +// } + +// impl From for EnclaveError { +// fn from(err: json_patch::PatchError) -> EnclaveError { EnclaveError::SystemError(EnclaveSystemError::StateError { err: format!("{}", err) } )} +// } + +impl From for EnclaveError { + fn from(err: str::Utf8Error) -> Self { EnclaveError::FailedTaskError(FailedTaskError::InputError { message: format!("{:?}", err) } )} +} + +// impl From for EnclaveError { +// fn from(err: hexutil::ParseHexError) -> Self { EnclaveError::FailedTaskError(FailedTaskError::InputError { message: format!("{:?}", err) } )} +// } + +impl ResultToEnclaveReturn for EnclaveError { + fn into_enclave_return(self) -> EnclaveReturn { self.into() } +} + +impl Into for EnclaveError { + fn into(self) -> EnclaveReturn { + use self::EnclaveError::*; + match self { + FailedTaskError {..} => EnclaveReturn::TaskFailure, + FailedTaskErrorWithGas {..} => EnclaveReturn::TaskFailure, + SystemError(e) => { + use self::EnclaveSystemError::*; + use self::CryptoError::*; + match e { + PermissionError { .. } => EnclaveReturn::PermissionError, + SgxError { .. } => EnclaveReturn::SgxError, + StateError { .. } => EnclaveReturn::StateError, + OcallError { .. } => EnclaveReturn::OcallError, + MessagingError { .. } => EnclaveReturn::MessagingError, + CryptoError{err} => match err { + RandomError { .. } => EnclaveReturn::SgxError, + DerivingKeyError { .. } | KeyError { .. } | MissingKeyError { .. } => EnclaveReturn::KeysError, + DecryptionError { .. } | EncryptionError { .. } | SigningError { .. } | ImproperEncryption | + ParsingError { ..} | RecoveryError { .. } => EnclaveReturn::EncryptionError, + } + // WorkerAuthError { .. } => EnclaveReturn::WorkerAuthError, + // KeyProvisionError { .. } => EnclaveReturn::KeyProvisionError, + } + + } + } + } +} + + +// #[derive(Fail)] +#[derive(Clone)] +pub enum CryptoError { + DerivingKeyError { self_key: [u8; 64], other_key: [u8; 64] }, + MissingKeyError { key_type: &'static str }, + DecryptionError, + ImproperEncryption, + EncryptionError, + SigningError { hashed_msg: [u8; 32] }, + ParsingError { sig: [u8; 65] }, + RecoveryError { sig: [u8; 65] }, + //#[cfg(feature = "asymmetric")] + KeyError { key_type: &'static str, err: Option }, + // #[cfg(not(feature = "asymmetric"))] + // KeyError { key_type: &'static str, err: Option<()> }, + // #[cfg(feature = "std")] + // RandomError { err: rand_std::Error }, + // #[cfg(feature = "sgx")] + RandomError { err: sgx_types::sgx_status_t }, +} + +impl ::std::fmt::Display for CryptoError { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + use self::CryptoError::*; + match self { + DerivingKeyError{ self_key, other_key} => write!(f, "Failed to derive a key with ECDH: self: {:?}, other: {:?}", &self_key[..], &other_key[..]), + KeyError { key_type, err } => write!(f, "The {} Isn't valid, err: {:?}", key_type, err), + MissingKeyError { key_type } => write!(f, "The following key is missing: {}", key_type), + DecryptionError => write!(f, "Failed Decrypting"), + ImproperEncryption => write!(f, "Improper Encryption"), + EncryptionError => write!(f, "Failed Encrypting"), + SigningError { hashed_msg } => write!(f, "Signing the message failed, msg hash: {:?}", hashed_msg), + ParsingError { sig } => write!(f, "Parsing the signature failed, sig: {:?}", &sig[..]), + RecoveryError { sig } => write!(f, "Recovering the pubkey failed using the sig: {:?}", &sig[..]), + RandomError{ err } => write!(f, "Failed Generating a random. Error: {:?}", err), + } + } +} + +impl ::std::fmt::Debug for CryptoError { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + use self::CryptoError::*; + match &self { + DerivingKeyError{ self_key, other_key} => { + let mut debug_builder = f.debug_struct("DerivingKeyError"); + debug_builder.field("self_key", &&self_key[..]); + debug_builder.field("other_key", &&other_key[..]); + debug_builder.finish() + } + KeyError { key_type, err } => { + let mut debug_builder = f.debug_struct("KeyError"); + debug_builder.field("key_type", key_type); + debug_builder.field("err", err); + debug_builder.finish() + }, + MissingKeyError { ref key_type } => { + let mut debug_builder = f.debug_struct("MissingKeyError"); + debug_builder.field("key_type", key_type); + debug_builder.finish() + }, + DecryptionError => { + let mut debug_builder = f.debug_tuple("DecryptionError"); + debug_builder.finish() + }, + ImproperEncryption => { + let mut debug_builder = f.debug_tuple("ImproperEncryption"); + debug_builder.finish() + }, + EncryptionError => { + let mut debug_builder = f.debug_tuple("EncryptionError"); + debug_builder.finish() + }, + SigningError { ref hashed_msg } => { + let mut debug_builder = f.debug_struct("DerivingKeyError"); + debug_builder.field("hashed_msg", hashed_msg); + debug_builder.finish() + }, + ParsingError { ref sig } => { + let mut debug_builder = f.debug_struct("ParsingError"); + debug_builder.field("sig", &&sig[..]); + debug_builder.finish() + }, + RecoveryError { ref sig } => { + let mut debug_builder = f.debug_struct("RecoveryError"); + debug_builder.field("self_key", &&sig[..]); + debug_builder.finish() + }, + RandomError{ ref err } => { + let mut debug_builder = f.debug_struct("RandomError"); + debug_builder.field("err", err); + debug_builder.finish() + }, + } + } +} + +/// Pro tip: If you want to add a string message to the error and you always hard code it, +/// then you can use `&'static str` instead of String, this will make your code much nicer. +//#[derive(Debug, Fail, Clone)] +#[derive(Debug, Clone)] +pub enum ToolsError { + /// The `MessagingError` error. + /// + /// This error means that there was a Messaging problem (e.g. couldn't deserialize a message) + //#[fail(display = "There's an error with the messaging: {}", err)] + MessagingError { + /// `Err` is the custom message that should explain what and where was the problem. + err: &'static str + //err: String + }, +} diff --git a/enclave/safetrace/enclave/src/hash.rs b/enclave/safetrace/enclave/src/hash.rs new file mode 100644 index 0000000..84d1708 --- /dev/null +++ b/enclave/safetrace/enclave/src/hash.rs @@ -0,0 +1,55 @@ +use tiny_keccak::Keccak; +use types::Hash256; + + +/// Takes a list of variables and concat them together with lengths in between. +/// What this does is appends the length of the messages before each message and makes one big slice from all of them. +/// e.g.: `S(H(len(a)+a, len(b)+b...))` +/// # Examples +/// ``` +/// use hash; +/// let msg = b"sign"; +/// let msg2 = b"this"; +/// let ready = hash::prepare_hash_multiple(&[msg, msg2]); +/// ``` +pub fn prepare_hash_multiple>(messages: &[B]) -> std::vec::Vec { + use std::{vec::Vec, mem}; + let mut res = Vec::with_capacity(messages.len() * mem::size_of::()); + for msg in messages { + let msg = msg.as_ref(); + let len = msg.len().to_be_bytes(); + res.extend_from_slice(&len); + res.extend_from_slice(&msg); + } + res +} + +// Hash a byte array into keccak256. +pub trait Keccak256 { + fn keccak256(&self) -> T where T: Sized; +} + +pub trait Sha256 { + fn sha256(&self) -> T where T: Sized; +} + +impl Keccak256 for [u8] { + fn keccak256(&self) -> Hash256 { + let mut keccak = Keccak::new_keccak256(); + let mut result = Hash256::default(); + keccak.update(self); + keccak.finalize(result.as_mut()); + result + } +} + +impl Sha256 for [u8] { + fn sha256(&self) -> Hash256 { + use sha2::{Digest}; + let mut hasher = sha2::Sha256::new(); + hasher.input(&self); + let mut result = Hash256::default(); + result.copy_from_slice(&hasher.result()); + result + } +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/keys_t.rs b/enclave/safetrace/enclave/src/keys_t.rs index 1eee307..266a6ec 100644 --- a/enclave/safetrace/enclave/src/keys_t.rs +++ b/enclave/safetrace/enclave/src/keys_t.rs @@ -1,21 +1,210 @@ use crate::SIGNING_KEY; -// use enigma_tools_t::common::errors_t::EnclaveError; -// use enigma_tools_m::utils::LockExpectMutex; -// use enigma_crypto::asymmetric::KeyPair; -// use enigma_tools_m::primitives::km_primitives::UserMessage; -use enigma_types::{DhKey, PubKey}; +use types::{PubKey, DhKey, SymmetricKey}; use std::collections::HashMap; -use std::{sync::SgxMutex, vec::Vec}; +use std::{sync::SgxMutex as Mutex, sync::SgxMutexGuard as MutexGuard, vec::Vec}; +use serde::{Deserialize, Serialize}; +use secp256k1::{PublicKey, SecretKey, SharedSecret}; +use errors_t::{CryptoError, EnclaveError, ToolsError::MessagingError}; +use hash::{Keccak256, prepare_hash_multiple}; -lazy_static! { pub static ref DH_KEYS: SgxMutex, DhKey>> = SgxMutex::new(HashMap::new()); } +//use ring::aead::{self, Nonce, Aad}; +//use std::{borrow::ToOwned}; + + +#[derive(Debug)] +pub struct KeyPair { + pubkey: PublicKey, + privkey: SecretKey, +} + +impl KeyPair { + /// This will generate a fresh pair of Public and Private keys. + /// it will use the available randomness from [crate::rand] + + pub fn new() -> Result { + use sgx_trts::trts::rsgx_read_rand; + // This loop is important to make sure that the resulting public key isn't a point in infinity(at the curve). + // So if the Resulting public key is bad we need to generate a new random private key and try again until it succeeds. + loop { + let mut me = [0u8; 32]; + rsgx_read_rand(&mut me); + if let Ok(privkey) = SecretKey::parse(&me) { + let pubkey = PublicKey::from_secret_key(&privkey); + return Ok(KeyPair { privkey, pubkey }); + } + } + } + + pub fn from_slice(privkey: &[u8; 32]) -> Result { + let privkey = SecretKey::parse(&privkey) + .map_err(|e| CryptoError::KeyError { key_type: "Private Key", err: Some(e) })?; + let pubkey = PublicKey::from_secret_key(&privkey); + + Ok(KeyPair { privkey, pubkey }) + } + + /// This function does an ECDH(point multiplication) between one's private key and the other one's public key. + /// + pub fn derive_key(&self, _pubarr: &PubKey) -> Result { + let mut pubarr: [u8; 65] = [0; 65]; + pubarr[0] = 4; + pubarr[1..].copy_from_slice(&_pubarr[..]); + + let pubkey = PublicKey::parse(&pubarr) + .map_err(|e| CryptoError::KeyError { key_type: "Private Key", err: Some(e) })?; + + let shared = SharedSecret::new(&pubkey, &self.privkey) + .map_err(|_| CryptoError::DerivingKeyError { self_key: self.get_pubkey(), other_key: *_pubarr })?; + + let mut result = [0u8; 32]; + result.copy_from_slice(shared.as_ref()); + Ok(result) + } + + fn pubkey_object_to_pubkey(key: &PublicKey) -> PubKey { + let mut sliced_pubkey: [u8; 64] = [0; 64]; + sliced_pubkey.clone_from_slice(&key.serialize()[1..65]); + sliced_pubkey + } + + pub fn get_privkey(&self) -> [u8; 32] { self.privkey.serialize() } + + /// Get the Public Key and slice the first byte + /// The first byte represents if the key is compressed or not. + /// Because we use uncompressed Keys That start with `0x04` we can slice it out. + /// + /// We should move to compressed keys in the future, this will save 31 bytes on each pubkey. + /// + /// See More: + /// `https://tools.ietf.org/html/rfc5480#section-2.2` + /// `https://docs.rs/libsecp256k1/0.1.13/src/secp256k1/lib.rs.html#146` + pub fn get_pubkey(&self) -> PubKey { + KeyPair::pubkey_object_to_pubkey(&self.pubkey) + } + + /// Sign a message using the Private Key. + /// # Examples + /// Simple Message signing: + /// ``` + /// use enigma_crypto::KeyPair; + /// let keys = KeyPair::new().unwrap(); + /// let msg = b"Sign this"; + /// let sig = keys.sign(msg); + /// ``` + /// + /// The function returns a 65 bytes slice that contains: + /// 1. 32 Bytes, ECDSA `r` variable. + /// 2. 32 Bytes ECDSA `s` variable. + /// 3. 1 Bytes ECDSA `v` variable aligned to the right for Ethereum compatibility + pub fn sign(&self, message: &[u8]) -> Result<[u8; 65], CryptoError> { + let hashed_msg = message.keccak256(); + let message_to_sign = secp256k1::Message::parse(&hashed_msg); + + let (sig, recovery) = secp256k1::sign(&message_to_sign, &self.privkey) + .map_err(|_| CryptoError::SigningError { hashed_msg: *hashed_msg })?; + + let v: u8 = recovery.into(); + let mut returnvalue = [0u8; 65]; + returnvalue[..64].copy_from_slice(&sig.serialize()); + returnvalue[64] = v + 27; + Ok(returnvalue) + } + +} + + +/// A struct to represent the UserMessage for the key exchange. +#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] +pub struct UserMessage { + pub(crate) pubkey: Vec, +} + +impl UserMessage { + // The reason for the prefix is that I(@elichai) don't feel comfortable signing a plain public key. + // Because ECDSA signature contains multiplication of curve points, so I'm not sure if signing on a valid curve point has any side effect. + const PREFIX: &'static [u8; 19] = b"Enigma User Message"; + + /// Generate a new UserMessage struct with the provided public key. + pub fn new(pubkey: PubKey) -> Self { + let pubkey = pubkey.to_vec(); + Self { pubkey } + } + + /// This should serialize the struct for it to be signed, using [`enigma_crypto::hash::prepare_hash_multiple()`] + /// it will add a prefix to the data, `b"Enigma User Message"`. + pub fn to_sign(&self) -> Vec { + let to_sign = [&Self::PREFIX[..], &self.pubkey]; + prepare_hash_multiple(&to_sign) + } + + /// This will serialize the Message using MessagePack. + pub fn into_message(self) -> Result, EnclaveError> { + //let mut buf = Vec::new(); + //let val = serde_json::to_value(self).map_err(|_| MessagingError { err: "Couldn't convert UserMesssage to Value" })?; + //val.serialize(&mut Serializer::new(&mut buf)).map_err(|_| MessagingError { err: "Couldn't serialize UserMesssage" })?;; + let val = serde_json::to_vec(&self).map_err(|_| MessagingError { err: "Couldn't convert UserMesssage to Value" })?; + Ok(val) + } + + // /// This will deserialize the Message using MessagePack. + // pub fn from_message(msg: &[u8]) -> Result { + // let mut des = Deserializer::new(&msg[..]); + // let res: serde_json::Value = Deserialize::deserialize(&mut des) + // .map_err(|_| MessagingError { err: "Couldn't Deserialize UserMesssage"})?;; + // let msg: Self = serde_json::from_value(res) + // .map_err(|_| MessagingError { err: "Couldn't convert Value to UserMesssage"})?; + // Ok(msg) + // } + + // /// Will return the DH public key from the message. + // pub fn get_pubkey(&self) -> PubKey { + // let mut pubkey = [0u8; 64]; + // pubkey.copy_from_slice(&self.pubkey[..]); + // pubkey + // } +} + + +// const IV_SIZE: usize = 96/8; +// static AES_MODE: &aead::Algorithm = &aead::AES_256_GCM; +// type IV = [u8; IV_SIZE]; + +// pub fn decrypt(cipheriv: &[u8], key: &SymmetricKey) -> Result, CryptoError> { +// if cipheriv.len() < IV_SIZE { +// return Err(CryptoError::ImproperEncryption); +// } +// let aes_decrypt = aead::OpeningKey::new(&AES_MODE, key) +// .map_err(|_| CryptoError::KeyError { key_type: "Decryption", err: None })?; + +// let (ciphertext, iv) = cipheriv.split_at(cipheriv.len()-12); +// let nonce = aead::Nonce::try_assume_unique_for_key(&iv).unwrap(); // This Cannot fail because split_at promises that iv.len()==12 +// let mut ciphertext = ciphertext.to_owned(); +// let decrypted_data = aead::open_in_place(&aes_decrypt, nonce, Aad::empty(), 0, &mut ciphertext); +// let decrypted_data = decrypted_data.map_err(|_| CryptoError::DecryptionError)?; + +// Ok(decrypted_data.to_vec()) +// } + + +/// A trait that is basically a shortcut for `mutex.lock().expect(format!("{} mutex is posion", name))` +/// you instead call `mutex.lock_expect(name)` and it will act the same. +pub trait LockExpectMutex { + /// See trait documentation. a shortcut for `lock()` and `expect()` + fn lock_expect(&self, name: &str) -> MutexGuard; +} + +impl LockExpectMutex for Mutex { + fn lock_expect(&self, name: &str) -> MutexGuard { self.lock().unwrap_or_else(|_| panic!("{} mutex is poison", name)) } +} + +lazy_static! { pub static ref DH_KEYS: Mutex, DhKey>> = Mutex::new(HashMap::new()); } pub(crate) unsafe fn ecall_get_user_key_internal(sig: &mut [u8; 65], user_pubkey: &PubKey) -> Result, EnclaveError> { - // let keys = KeyPair::new()?; - // let req = UserMessage::new(keys.get_pubkey()); - // *sig = SIGNING_KEY.sign(&req.to_sign())?; - // let msg = req.into_message()?; - // let enc_key = keys.derive_key(&user_pubkey)?; - // DH_KEYS.lock_expect("DH Keys").insert(user_pubkey.to_vec(), enc_key); - let msg; + let keys = KeyPair::new()?; + let req = UserMessage::new(keys.get_pubkey()); + *sig = SIGNING_KEY.sign(&req.to_sign())?; + let msg = req.into_message()?; + let enc_key = keys.derive_key(&user_pubkey)?; + DH_KEYS.lock_expect("DH Keys").insert(user_pubkey.to_vec(), enc_key); Ok(msg) -} \ No newline at end of file +} diff --git a/enclave/safetrace/enclave/src/lib.rs b/enclave/safetrace/enclave/src/lib.rs index b84eb5b..f0f5d3f 100644 --- a/enclave/safetrace/enclave/src/lib.rs +++ b/enclave/safetrace/enclave/src/lib.rs @@ -22,129 +22,119 @@ #![cfg_attr(target_env = "sgx", feature(rustc_private))] extern crate sgx_types; -extern crate sgx_trts; #[cfg(not(target_env = "sgx"))] #[macro_use] extern crate sgx_tstd as std; +extern crate sgx_rand; +extern crate sgx_trts; +extern crate sgx_tseal; +#[macro_use] +extern crate lazy_static; -use sgx_types::*; -use sgx_types::metadata::*; -use sgx_trts::enclave; -//use sgx_trts::{is_x86_feature_detected, is_cpu_feature_supported}; -use std::string::String; -use std::vec::Vec; -use std::io::{self, Write}; -use std::slice; -use std::backtrace::{self, PrintFormat}; - -extern crate enigma_types; - -// use enigma_types::{ -// traits::SliceCPtr, ContractAddress, DhKey, EnclaveReturn, ExecuteResult, Hash256, PubKey, RawPointer, ResultStatus, -// }; -use enigma_types::{EnclaveReturn}; - -#[no_mangle] -pub extern "C" fn say_something(some_string: *const u8, some_len: usize) -> sgx_status_t { - - let str_slice = unsafe { slice::from_raw_parts(some_string, some_len) }; - let _ = io::stdout().write(str_slice); - - // A sample &'static string - let rust_raw_string = "This is a in-Enclave "; - // An array - let word:[u8;4] = [82, 117, 115, 116]; - // An vector - let word_vec:Vec = vec![32, 115, 116, 114, 105, 110, 103, 33]; - - // Construct a string from &'static string - let mut hello_string = String::from(rust_raw_string); +// extern crate sgx_serialize; +// #[macro_use] +// extern crate sgx_serialize_derive; - // Iterate on word array - for c in word.iter() { - hello_string.push(*c as char); - } +use sgx_types::*; +use std::{slice}; - // Rust style convertion - hello_string += String::from_utf8(word_vec).expect("Invalid UTF-8") - .as_str(); +extern crate serde; +extern crate serde_json; +extern crate secp256k1; +extern crate tiny_keccak; +extern crate sha2; +extern crate rustc_hex; +extern crate arrayvec; +//extern crate ring; - // Ocall to normal world for output - println!("{}", &hello_string); +#[macro_use] +mod macros; +mod errors_t; +mod data; +mod keys_t; +mod storage; +mod types; +mod hash; +mod traits; + +use keys_t::{ecall_get_user_key_internal, KeyPair, DH_KEYS, LockExpectMutex}; +use data::ecall_add_personal_data_internal; +use storage::*; +use types::{PubKey, DhKey, EnclaveReturn}; +use errors_t::{EnclaveError, CryptoError}; +use traits::SliceCPtr; + +lazy_static! { + pub(crate) static ref SIGNING_KEY: KeyPair = get_sealed_keys_wrapper(); +} - let _ = backtrace::enable_backtrace("enclave.signed.so", PrintFormat::Full); +extern "C" { + fn ocall_save_to_memory(ptr: *mut u64, data_ptr: *const u8, data_len: usize) -> sgx_status_t; +} - let gd = enclave::SgxGlobalData::new(); - println!("gd: {} {} {} {} ", gd.get_static_tcs_num(), gd.get_eremove_tcs_num(), gd.get_dyn_tcs_num(), gd.get_tcs_max_num()); - let (static_num, eremove_num, dyn_num) = get_thread_num(); - println!("static: {} eremove: {} dyn: {}", static_num, eremove_num, dyn_num); - unsafe { - println!("EDMM: {}, feature: {}", EDMM_supported, g_cpu_feature_indicator); - } - if is_x86_feature_detected!("sgx") { - println!("supported sgx"); +// TODO: Replace u64 with *const u8, and pass it via the ocall using *const *const u8 +pub fn save_to_untrusted_memory(data: &[u8]) -> Result { + let mut ptr = 0u64; + match unsafe { ocall_save_to_memory(&mut ptr as *mut u64, data.as_c_ptr(), data.len()) } { + sgx_status_t::SGX_SUCCESS => Ok(ptr), + e => Err(e.into()), } - - sgx_status_t::SGX_SUCCESS } -#[link(name = "sgx_trts")] -extern { - static g_cpu_feature_indicator: uint64_t; - static EDMM_supported: c_int; +fn get_sealed_keys_wrapper() -> KeyPair { + // // Get Home path via Ocall + // let mut path_buf = get_home_path().unwrap(); + // // add the filename to the path: `keypair.sealed` + // path_buf.push("keypair.sealed"); + // let sealed_path = path_buf.to_str().unwrap(); + + // TODO: Decide what to do if failed to obtain keys. + match get_sealed_keys("keypair.sealed") { + Ok(key) => key, + Err(err) => panic!("Failed obtaining keys: {:?}", err), + } } - -fn get_thread_num() -> (u32, u32, u32) { - let gd = unsafe { - let p = enclave::rsgx_get_global_data(); - &*p +#[no_mangle] +pub unsafe extern "C" fn ecall_get_user_key(sig: &mut [u8; 65], user_pubkey: &[u8; 64], serialized_ptr: *mut u64) -> EnclaveReturn { + println!("Get User Key called inside enclave"); + let msg = match ecall_get_user_key_internal(sig, user_pubkey) { + Ok(msg) => msg, + Err(e) => return e.into(), }; + *serialized_ptr = match save_to_untrusted_memory(&msg[..]) { + Ok(ptr) => ptr, + Err(e) => return e.into(), + }; + EnclaveReturn::Success +} - let mut static_thread_num: u32 = 0; - let mut eremove_thread_num: u32 = 0; - let mut dyn_thread_num: u32 = 0; - let layout_table = &gd.layout_table[0..gd.layout_entry_num as usize]; - unsafe { traversal_layout(&mut static_thread_num, &mut dyn_thread_num, &mut eremove_thread_num, layout_table); } - - unsafe fn traversal_layout(static_num: &mut u32, dyn_num: &mut u32, eremove_num: &mut u32, layout_table: &[layout_t]) - { - for (i, layout) in layout_table.iter().enumerate() { - if !is_group_id!(layout.group.id as u32) { - if (layout.entry.attributes & PAGE_ATTR_EADD) != 0 { - if (layout.entry.content_offset != 0) && (layout.entry.si_flags == SI_FLAGS_TCS) { - if (layout.entry.attributes & PAGE_ATTR_EREMOVE) == 0 { - *static_num += 1; - } else { - *eremove_num += 1; - } - } - } - if (layout.entry.attributes & PAGE_ATTR_POST_ADD) != 0 { - if layout.entry.id == LAYOUT_ID_TCS_DYN as u16 { - *dyn_num += 1; - } - } - } else { - for _ in 0..layout.group.load_times { - traversal_layout(static_num, dyn_num, eremove_num, &layout_table[i - layout.group.entry_count as usize..i]) - } - } - } - } - (static_thread_num, eremove_thread_num, dyn_thread_num) +fn get_io_key(user_key: &PubKey) -> Result { + let io_key = DH_KEYS + .lock_expect("User DH Key") + .remove(&user_key[..]) + .ok_or(CryptoError::MissingKeyError { key_type: "DH Key" })?; + Ok(io_key) } #[no_mangle] -pub unsafe extern "C" fn ecall_get_user_key(sig: &mut [u8; 65], user_pubkey: &PubKey, serialized_ptr: *mut u64) -> EnclaveReturn { - // let msg = match ecall_get_user_key_internal(sig, user_pubkey) { - // Ok(msg) => msg, - // Err(e) => return e.into(), - // }; - // *serialized_ptr = match ocalls_t::save_to_untrusted_memory(&msg[..]) { - // Ok(ptr) => ptr, - // Err(e) => return e.into(), - // }; +pub unsafe extern "C" fn ecall_add_personal_data( + encryptedUserId: *const u8, + encryptedUserId_len: usize, + encryptedData: *const u8, + encryptedData_len: usize, + userPubKey: &[u8; 64]) -> EnclaveReturn { + + let encryptedUserId = slice::from_raw_parts(encryptedUserId, encryptedUserId_len); + let encryptedData = slice::from_raw_parts(encryptedData, encryptedData_len); + + let io_key; + match get_io_key(userPubKey) { + Ok(v) => io_key = v, + Err(e) => return e.into(), + } + + let result = ecall_add_personal_data_internal(encryptedUserId, encryptedData, userPubKey, &io_key); EnclaveReturn::Success } \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/macros.rs b/enclave/safetrace/enclave/src/macros.rs new file mode 100644 index 0000000..4a71a8b --- /dev/null +++ b/enclave/safetrace/enclave/src/macros.rs @@ -0,0 +1,8 @@ +#[macro_export] +macro_rules! debug_println { + ($($arg:tt)*) => { + if cfg!(debug_assertions) { + println!($($arg)*); + } + }; +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/storage.rs b/enclave/safetrace/enclave/src/storage.rs new file mode 100644 index 0000000..8484ab0 --- /dev/null +++ b/enclave/safetrace/enclave/src/storage.rs @@ -0,0 +1,181 @@ +use sgx_tseal::SgxSealedData; +use sgx_types::marker::ContiguousMemory; +#[cfg(not(target_env = "sgx"))] +use sgx_types::{sgx_attributes_t, sgx_sealed_data_t, sgx_status_t}; +use std::io::{Read, Write, self}; +use std::string::*; +use std::untrusted::fs::remove_file; +use std::untrusted::fs::File; +//use enigma_crypto::asymmetric; +use crate::keys_t::{KeyPair}; +use crate::errors_t::{EnclaveError, EnclaveError::*, EnclaveSystemError::*}; + +pub const SEALING_KEY_SIZE: usize = 32; +pub const SEAL_LOG_SIZE: usize = 2048; + +#[derive(Copy, Clone, Default, Debug)] +pub struct SecretKeyStorage { + pub version: u32, + pub data: [u8; SEALING_KEY_SIZE], +} +unsafe impl ContiguousMemory for SecretKeyStorage {} + +impl SecretKeyStorage { + /// safe seal + /// param: the_data : clear text to be sealed + /// param: sealed_log_out : the output of the sealed data + pub fn seal_key(&self, sealed_log_out: &mut [u8; SEAL_LOG_SIZE]) { + let additional: [u8; 0] = [0_u8; 0]; + let attribute_mask = sgx_attributes_t { flags: 0xffff_ffff_ffff_fff3, xfrm: 0 }; + let sealed_data = SgxSealedData::::seal_data_ex( + sgx_types::SGX_KEYPOLICY_MRENCLAVE, //key policy + attribute_mask, + 0, //misc mask + &additional, + &self, + ) + .unwrap(); + // to sealed_log -> + // let mut sealed_log_arr:[u8;2048] = [0;2048]; + let sealed_log = sealed_log_out.as_mut_ptr(); + let sealed_log_size: usize = 2048; + to_sealed_log(&sealed_data, sealed_log, sealed_log_size as u32); + } + + // TODO: Add Error Handling. + /// unseal key + /// param: sealed_log_in : the encrypted blob + /// param: udata : the SecreyKeyStorage (clear text) + pub fn unseal_key(sealed_log_in: &mut [u8]) -> Option { + let sealed_log_size: usize = SEAL_LOG_SIZE; + let sealed_log = sealed_log_in.as_mut_ptr(); + let sealed_data = from_sealed_log::(sealed_log, sealed_log_size as u32)?; + let unsealed_result = sealed_data.unseal_data(); + match unsealed_result { + Ok(unsealed_data) => { + let udata = unsealed_data.get_decrypt_txt(); + Some(*udata) + } + Err(err) => { + // TODO: Handle this. It can causes panic in Simulation Mode until deleting the file. + if err == sgx_status_t::SGX_ERROR_MAC_MISMATCH { + None + } else { + panic!(err) + } + } + } + } +} + +fn to_sealed_log(sealed_data: &SgxSealedData, sealed_log: *mut u8, + sealed_log_size: u32, ) -> Option<*mut sgx_sealed_data_t> { + unsafe { sealed_data.to_raw_sealed_data_t(sealed_log as *mut sgx_sealed_data_t, sealed_log_size) } +} + +fn from_sealed_log<'a, T: Copy + ContiguousMemory>(sealed_log: *mut u8, sealed_log_size: u32) -> Option> { + unsafe { SgxSealedData::::from_raw_sealed_data_t(sealed_log as *mut sgx_sealed_data_t, sealed_log_size) } +} + +// file system +pub fn save_sealed_key(path: &str, sealed_key: &[u8]) { + let opt = File::create(path); + if opt.is_ok() { + debug_println!("Created file => {} ", path); + let mut file = opt.unwrap(); + let result = file.write_all(&sealed_key); + if result.is_ok() { + debug_println!("success writting to file! "); + } else { + debug_println!("error writting to file! "); + } + } +} + +pub fn load_sealed_key(path: &str, sealed_key: &mut [u8]) { + let opt = File::open(path); + if opt.is_ok() { + debug_println!("Created file => {} ", path); + let mut file = opt.unwrap(); + let result = file.read(sealed_key); + if result.is_ok() { + debug_println!("success writting to file! "); + } else { + debug_println!("error writting to file! "); + } + } +} + +// TODO:: handle failure and return a result including the empty match +pub fn get_sealed_keys(sealed_path: &str) -> Result { + // Open the file + match File::open(sealed_path) { + Ok(mut file) => { + let mut sealed: [u8; SEAL_LOG_SIZE] = [0; SEAL_LOG_SIZE]; + match file.read(&mut sealed) { + Ok(_v) => {} + Err(_e) => {} + } + match SecretKeyStorage::unseal_key(&mut sealed) { + // If the data is unsealed correctly return this KeyPair. + Some(unsealed_data) => { + debug_println!("Succeeded reading key from file"); + return Ok(KeyPair::from_slice(&unsealed_data.data)?); + } + // If the data couldn't get unsealed remove the file. + None => { + debug_println!("Failed reading file, Removing"); + remove_file(sealed_path); + } + }; + } + Err(err) => { + if err.kind() == io::ErrorKind::PermissionDenied { + return Err(SystemError(PermissionError { file: sealed_path.to_string() })); + } + } + } + + // Generate a new Keypair and seal it. + let keypair = KeyPair::new()?; + let data = SecretKeyStorage { version: 0x1, data: keypair.get_privkey() }; + let mut output: [u8; SEAL_LOG_SIZE] = [0; SEAL_LOG_SIZE]; + data.seal_key(&mut output); + save_sealed_key(&sealed_path, &output); + + Ok(keypair) +} + + + +//#[cfg(debug_assertions)] +pub mod tests { + use storage::*; + //use std::untrusted::fs::*; + + /* Test functions */ + pub fn test_full_sealing_storage() { + // generate mock data + let mut data = SecretKeyStorage::default(); + data.version = 0x1234; + for i in 0..32 { + data.data[i] = b'i'; + } + // seal data + let mut sealed_log_in: [u8; SEAL_LOG_SIZE] = [0; SEAL_LOG_SIZE]; + data.seal_key(&mut sealed_log_in); + // save sealed_log to file + let p = String::from("seal_test.sealed"); + save_sealed_key(&p, &sealed_log_in); + // load sealed_log from file + let mut sealed_log_out: [u8; SEAL_LOG_SIZE] = [0; SEAL_LOG_SIZE]; + load_sealed_key(&p, &mut sealed_log_out); + // unseal data + let unsealed_data = SecretKeyStorage::unseal_key(&mut sealed_log_out).unwrap(); + // compare data + assert_eq!(data.data, unsealed_data.data); + // delete the file + let f = remove_file(&p); + assert!(f.is_ok()); + } +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/traits.rs b/enclave/safetrace/enclave/src/traits.rs new file mode 100644 index 0000000..dce6555 --- /dev/null +++ b/enclave/safetrace/enclave/src/traits.rs @@ -0,0 +1,45 @@ +//! # Traits module +//! This module should provide low level traits that are required on both sides of the SGX. +//! right now it only contains the [`SliceCPtr`] trait which is used to *always* provide valid C pointers. + +static EMPTY: [u8; 1] = [0]; + +/// This trait provides an interface into `C` like pointers. +/// in Rust if you try to get a pointer to an empty vector you'll get: +/// 0x0000000000000001 OR 0x0000000000000000, although bear in mind this *isn't* officially defined. +/// this behavior is UB in C's `malloc`, passing an invalid pointer with size 0 to `malloc` is implementation defined. +/// in the case of Intel's + GCC what we observed is a Segmentation Fault. +/// this is why if the vec/slice is empty we use this trait to pass a pointer to a stack allocated static `[0]` array. +/// this will make the pointer valid, and when the len is zero +/// `malloc` won't allocate anything but also won't produce a SegFault +pub trait SliceCPtr { + /// The Target for the trait. + /// this trait can't be generic because it should only be implemented once per type + /// (See [Associated Types][https://doc.rust-lang.org/rust-by-example/generics/assoc_items/types.html]) + type Target; + /// This function is what will produce a valid C pointer to the target + /// even if the target is 0 sized (and rust will produce a C *invalid* pointer for it ) + fn as_c_ptr(&self) -> *const Self::Target; +} + +impl SliceCPtr for [T] { + type Target = T; + fn as_c_ptr(&self) -> *const Self::Target { + if self.is_empty() { + EMPTY.as_ptr() as *const _ + } else { + self.as_ptr() + } + } +} + +impl SliceCPtr for str { + type Target = u8; + fn as_c_ptr(&self) -> *const Self::Target { + if self.is_empty() { + EMPTY.as_ptr() as *const _ + } else { + self.as_ptr() + } + } +} \ No newline at end of file diff --git a/enclave/safetrace/enclave/src/types.rs b/enclave/safetrace/enclave/src/types.rs new file mode 100644 index 0000000..109d6fa --- /dev/null +++ b/enclave/safetrace/enclave/src/types.rs @@ -0,0 +1,131 @@ +use core::ops::{Deref, DerefMut}; +use rustc_hex::{FromHex, FromHexError}; +use arrayvec::ArrayVec; + + +pub type SymmetricKey = [u8; 32]; +pub type StateKey = SymmetricKey; +pub type DhKey = SymmetricKey; +pub type PubKey = [u8; 64]; + + +#[repr(C)] +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum EnclaveReturn { + Success, + TaskFailure, + KeysError, + EncryptionError, + SigningError, + PermissionError, + SgxError, + StateError, + OcallError, + OcallDBError, + MessagingError, + Other, +// Uninitialized, +} + +impl Default for EnclaveReturn { + fn default() -> EnclaveReturn { EnclaveReturn::Success } +} + +impl ::std::fmt::Display for EnclaveReturn { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + use self::EnclaveReturn::*; + let p = match *self { + Success => "EnclaveReturn: Success", + TaskFailure => "EnclaveReturn: Task failure", + KeysError => "EnclaveReturn: KeysError", + EncryptionError => "EnclaveReturn: EncryptionError", + SigningError => "EnclaveReturn: SigningError", + PermissionError => "EnclaveReturn: PermissionError", + SgxError => "EnclaveReturn: SgxError", + StateError => "EnclaveReturn: StateError", + OcallError => "EnclaveReturn: OcallError", + OcallDBError => "EnclaveReturn: OcallDBError", + MessagingError => "EnclaveReturn: MessagingError", + Other => "EnclaveReturn: Other", + }; + write!(f, "{}", p) + } +} + +pub trait ResultToEnclaveReturn { + fn into_enclave_return(self) -> EnclaveReturn; +} + +impl From> for EnclaveReturn { + fn from(res: Result<(), T>) -> Self { + match res { + Ok(()) => EnclaveReturn::Success, + Err(e) => ResultToEnclaveReturn::into_enclave_return(e), + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Default)] +#[repr(C)] +pub struct Hash256([u8; 32]); + + +impl Hash256 { + pub fn copy_from_slice(&mut self, src: &[u8]) { + self.0.copy_from_slice(src) + } + + pub fn from_hex(hex: &str) -> Result { + if hex.len() != 64 { + return Err(FromHexError::InvalidHexLength); + } + let hex_vec: ArrayVec<[u8; 32]> = hex.from_hex()?; + let mut result = Self::default(); + result.copy_from_slice(&hex_vec); + Ok(result) + } + + /// Checks if the struct contains only zeroes or not. + pub fn is_zero(&self) -> bool { + self.0 == [0u8;32] + } + +} + +impl From<[u8; 32]> for Hash256 { + fn from(arr: [u8; 32]) -> Self { + Hash256(arr) + } +} + +impl Into<[u8; 32]> for Hash256 { + fn into(self) -> [u8; 32] { + self.0 + } +} + +impl Deref for Hash256 { + type Target = [u8; 32]; + + fn deref(&self) -> &[u8; 32] { + &self.0 + } +} + +impl DerefMut for Hash256 { + fn deref_mut(&mut self) -> &mut [u8; 32] { + &mut self.0 + } +} + +impl AsMut<[u8]> for Hash256 { + fn as_mut(&mut self) -> &mut [u8] { + &mut self.0 + } +} + +impl AsRef<[u8]> for Hash256 { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} \ No newline at end of file