http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/70e3a3a3/swift/readme.txt ---------------------------------------------------------------------- diff --git a/swift/readme.txt b/swift/readme.txt deleted file mode 100644 index 708054d..0000000 --- a/swift/readme.txt +++ /dev/null @@ -1,45 +0,0 @@ -AMCL is very simple to build for Swift. - -First - decide the modulus and curve type you want to use. Edit rom.swift -where indicated. You will probably want to use one of the curves whose -details are already in there. - -Three example API files are provided, mpin.swift which -supports our M-Pin (tm) protocol, ecdh.swift which supports elliptic -curve key exchange, digital signature and public key crypto, and rsa.swift -which supports the RSA method. The first can be tested using the -TestMPIN.swift driver programs, the second can be tested using TestECDH.swift -and TestECM.swift, and the third with TestRSA.swift - -In the rom.swift file you must provide the curve constants. Several examples -are provided there, if you are willing to use one of these. - -For a quick jumpstart:- - -From a terminal window in a /lib directory create a dynamic library using the command - -swiftc big.swift rom.swift dbig.swift rand.swift hash.swift fp.swift fp2.swift ecp.swift ecp2.swift aes.swift gcm.swift fp4.swift fp12.swift ff.swift pair.swift rsa.swift ecdh.swift mpin.swift -Ounchecked -whole-module-optimization -emit-library -emit-module -module-name clint - -This creates the files - -libclint.dylib -clint.swiftmodule - -Copy these to a project directory, which contains only the files - -TestECDH.swift -TestRSA.swift -TestMPIN.swift - -And create and run the projects by issuing the commands - -swift -lclint -I. TestMPIN.swift -swift -lclint -I. TestECDH.swift -swift -lclint -I. TestRSA.swift - -Note that classes and methods that need to be exposed to consuming programs, -should be made "public" when and if needed. Here we have done this as needed -just for these example programs - - -
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/70e3a3a3/swift/rom.swift ---------------------------------------------------------------------- diff --git a/swift/rom.swift b/swift/rom.swift deleted file mode 100644 index aaf6c76..0000000 --- a/swift/rom.swift +++ /dev/null @@ -1,296 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ -// -// rom.swift -// -// -// Created by Michael Scott on 12/06/2015. -// Copyright (c) 2015 Michael Scott. All rights reserved. -// - -final public class ROM{ - static let NLEN:Int=9 - static let CHUNK:Int=32 - static let DNLEN:Int=2*NLEN - -/*** Enter Some Field details here ***/ - // BN Curve - static let MODBITS:Int32 = 254 /* Number of bits in Modulus */ - static let MOD8:Int32 = 3 /* Modulus mod 8 */ - // Curve 25519 -// static let MODBITS:Int32=255 -// static let MOD8:Int32=5 - - // NIST256 or Brainpool -// static let MODBITS:Int32=256 -// static let MOD8:Int32=7 - - // MF254 -// static let MODBITS:Int32=254 -// static let MOD8:Int32=7 - // MS255 -// static let MODBITS:Int32 = 255 -// static let MOD8:Int32 = 3 - // MF256 -// static let MODBITS:Int32 = 256 -// static let MOD8:Int32 = 7 - // MS256 -// static let MODBITS:Int32 = 256 -// static let MOD8:Int32 = 3 - - // ANSSI -// static let MODBITS:Int32 = 256 -// static let MOD8:Int32 = 3 - - static let BASEBITS:Int32=29 - static let OMASK:Int32=Int32(-1)<<Int32(MODBITS%BASEBITS) - static let MASK:Int32=((Int32(1)<<BASEBITS)-Int32(1)) - static let TBITS:Int32=MODBITS%BASEBITS; // Number of active bits in top word - static let TMASK:Int32=(Int32(1)<<TBITS)-1; - static let MODBYTES:Int32=32 - static let NEXCESS:Int32 = (Int32(1)<<(Int32(CHUNK)-BASEBITS-1)) - static let FEXCESS:Int32 = (Int32(1)<<(BASEBITS*Int32(NLEN)-MODBITS)); - - /* Don't Modify from here... */ - static let NOT_SPECIAL=0 - static let PSEUDO_MERSENNE=1 - static let MONTGOMERY_FRIENDLY=2 - static let WEIERSTRASS=0 - static let EDWARDS=1 - static let MONTGOMERY=2 - /* ...to here */ - - - /* Finite field support - for RSA, DH etc. */ - static let FF_BITS:Int=2048; /* Finite Field Size in bits - must be 256.2^n */ - static public let FFLEN=(FF_BITS/256) - static public let HFLEN=(FFLEN/2); /* Useful for half-size RSA private key operations */ - -// START SPECIFY FIELD DETAILS HERE -//********************************************************************************* -// Curve25519 Modulus -// static let MODTYPE=PSEUDO_MERSENNE -// static let Modulus:[Int32]=[0x1FFFFFED,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF] -// static let MConst:Int32=19 - -// NIST-256 Modulus -// static let MODTYPE=NOT_SPECIAL -// static let Modulus:[Int32]=[0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FF,0x0,0x0,0x40000,0x1FE00000,0xFFFFFF] -// static let MConst:Int32=1 - -// MF254 Modulus -// static let MODTYPE=MONTGOMERY_FRIENDLY -// static let Modulus:[Int32]=[0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3F80FF] -// static let MConst:Int32=0x3F8100 -// MS255 Modulus -// static let MODTYPE = PSEUDO_MERSENNE -// static let Modulus:[Int32]=[0x1FFFFD03,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF] -// static let MConst:Int32=0x2FD -// MF256 Modulus -// static let MODTYPE = MONTGOMERY_FRIENDLY -// static let Modulus:[Int32]=[0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFA7FF] -// static let MConst:Int32=0xFFA800 -// MS256 Modulus -// static let MODTYPE = PSEUDO_MERSENNE -// static let Modulus:[Int32]=[0x1FFFFF43,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF] -// static let MConst:Int32 = 0xBD - // Brainpool Modulus -// static let MODTYPE = NOT_SPECIAL -// static let Modulus:[Int32]=[0x1F6E5377,0x9A40E8,0x9880A08,0x17EC47AA,0x18D726E3,0x5484EC1,0x6F0F998,0x1B743DD5,0xA9FB57] -// static let MConst:Int32 = 0xEFD89B9 - // ANSSI Modulus -// static let MODTYPE = NOT_SPECIAL -// static let Modulus:[Int32]=[0x186E9C03,0x7E79A9E,0x12329B7A,0x35B7957,0x435B396,0x16F46721,0x163C4049,0x1181675A,0xF1FD17] -// static let MConst:Int32 = 0x164E1155 - - // BNCX Curve Modulus - static let MODTYPE = NOT_SPECIAL - static let Modulus:[Int32]=[0x1C1B55B3,0x13311F7A,0x24FB86F,0x1FADDC30,0x166D3243,0xFB23D31,0x836C2F7,0x10E05,0x240000] - static let MConst:Int32=0x19789E85 - - - // START SPECIFY CURVE DETAILS HERE - //********************************************************************************* - // Original Curve25519 - // static let CURVETYPE=MONTGOMERY - // static let CURVE_A:Int32 = 486662 - // static let CURVE_B:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - // static let CURVE_Order:[Int32]=[0x1CF5D3ED,0x9318D2,0x1DE73596,0x1DF3BD45,0x14D,0x0,0x0,0x0,0x100000] - // static let CURVE_Gx:[Int32]=[0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - // static let CURVE_Gy:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used -// Ed25519 Curve - //static let CURVETYPE=EDWARDS - //static let CURVE_A:Int32 = -1 - //static let CURVE_B:[Int32]=[0x135978A3,0xF5A6E50,0x10762ADD,0x149A82,0x1E898007,0x3CBBBC,0x19CE331D,0x1DC56DFF,0x52036C] - //static let CURVE_Order:[Int32]=[0x1CF5D3ED,0x9318D2,0x1DE73596,0x1DF3BD45,0x14D,0x0,0x0,0x0,0x100000] - //static let CURVE_Gx:[Int32]=[0xF25D51A,0xAB16B04,0x969ECB2,0x198EC12A,0xDC5C692,0x1118FEEB,0xFFB0293,0x1A79ADCA,0x216936] - //static let CURVE_Gy:[Int32]=[0x6666658,0x13333333,0x19999999,0xCCCCCCC,0x6666666,0x13333333,0x19999999,0xCCCCCCC,0x666666] - -// NIST-256 Curve - // static let CURVETYPE=WEIERSTRASS - // static let CURVE_A:Int32 = -3; - // static let CURVE_B:[Int32]=[0x7D2604B,0x1E71E1F1,0x14EC3D8E,0x1A0D6198,0x86BC651,0x1EAABB4C,0xF9ECFAE,0x1B154752,0x5AC635] - // static let CURVE_Order:[Int32]=[0x1C632551,0x1DCE5617,0x5E7A13C,0xDF55B4E,0x1FFFFBCE,0x1FFFFFFF,0x3FFFF,0x1FE00000,0xFFFFFF] - // static let CURVE_Gx:[Int32]=[0x1898C296,0x509CA2E,0x1ACCE83D,0x6FB025B,0x40F2770,0x1372B1D2,0x91FE2F3,0x1E5C2588,0x6B17D1] - // static let CURVE_Gy:[Int32]=[0x17BF51F5,0x1DB20341,0xC57B3B2,0x1C66AED6,0x19E162BC,0x15A53E07,0x1E6E3B9F,0x1C5FC34F,0x4FE342] - - // MF254 Modulus, Weierstrass Curve w-254-mont - // static let CURVETYPE=WEIERSTRASS - // static let CURVE_A:Int32 = -3 - // static let CURVE_B:[Int32]=[0x1FFFD08D,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3F80FF] - // static let CURVE_Order:[Int32]=[0xF8DF83F,0x1D20CE25,0x8DD701B,0x317D41B,0x1FFFFEB8,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3F80FF] - // static let CURVE_Gx:[Int32]=[0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - // static let CURVE_Gy:[Int32]=[0x190D4EBC,0xB2EF9BF,0x14464C6B,0xE71C7F0,0x18AEBDFB,0xD3ADEBB,0x18052B85,0x1A6765CA,0x140E3F] - - // MF254 Modulus, Edwards Curve ed-254-mont - // static let CURVETYPE = EDWARDS - // static let CURVE_A:Int32 = -1 - // static let CURVE_B:[Int32]=[0x367B,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - // static let CURVE_Order:[Int32]=[0x46E98C7,0x179E9FF6,0x158BEC3A,0xA60D917,0x1FFFFEB9,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFE03F] - // static let CURVE_Gx:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - // static let CURVE_Gy:[Int32]=[0xF2701E5,0x29687ED,0xC84861F,0x535081C,0x3F4E363,0x6A811B,0xCD65474,0x121AD498,0x19F0E6] - - // MF254 Modulus, Montgomery Curve - //static let CURVETYPE = MONTGOMERY - //static let CURVE_A:Int32 = -55790; - //static let CURVE_B:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - //static let CURVE_Order:[Int32]=[0x46E98C7,0x179E9FF6,0x158BEC3A,0xA60D917,0x1FFFFEB9,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFE03F] - //static let CURVE_Gx:[Int32]=[0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - - // MS255 Modulus, Weierstrass Curve - //static let CURVETYPE = WEIERSTRASS - //static let CURVE_A:Int32 = -3 - //static let CURVE_B:[Int32]=[0x1FFFAB46,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF] - //static let CURVE_Order:[Int32]=[0x1C594AEB,0x1C7D64C1,0x14ACF7EA,0x14705075,0x1FFFF864,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF] - //static let CURVE_Gx:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x9CB44BA,0x199FFB3B,0x1F698345,0xD8F19BB,0x17D177DB,0x1FFCD97F,0xCE487A,0x181DB74F,0x6F7A6A] - - // MS255 Modulus, Edwards Curve - //static let CURVETYPE = EDWARDS - //static let CURVE_A:Int32 = -1 - //static let CURVE_B:[Int32]=[0xEA97,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Order:[Int32]=[0x436EB75,0x24E8F68,0x9A0CBAB,0x34F0BDB,0x1FFFFDCF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFF] - //static let CURVE_Gx:[Int32]=[0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x108736A0,0x11512ADE,0x1116916E,0x29715DA,0x47E5529,0x66EC706,0x1517B095,0xA694F76,0x26CB78] - - // MS255 Modulus, Montgomery Curve - //static let CURVETYPE=MONTGOMERY - //static let CURVE_A:Int32 = -240222 - //static let CURVE_B:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - //static let CURVE_Order:[Int32]=[0x436EB75,0x24E8F68,0x9A0CBAB,0x34F0BDB,0x1FFFFDCF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFF] - //static let CURVE_Gx:[Int32]=[0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - - // MF256 Modulus, Weierstrass Curve - //static let CURVETYPE = WEIERSTRASS - //static let CURVE_A:Int32 = -3; - //static let CURVE_B:[Int32]=[0x14E6A,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Order:[Int32]=[0x79857EB,0x8862F0D,0x1941D2E7,0x2EA27CD,0x1FFFFFC5,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFA7FF] - //static let CURVE_Gx:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0xB724D2A,0x3CAA61,0x5371984,0x128FD71B,0x1AE28956,0x1D13091E,0x339EEAE,0x10F7C301,0x20887C] - - // MF256, Edwards Curve - //static let CURVETYPE = EDWARDS - //static let CURVE_A:Int32 = -1 - //static let CURVE_B:[Int32]=[0x350A,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Order:[Int32]=[0x18EC7BAB,0x16C976F6,0x19CCF259,0x9775F70,0x1FFFFB15,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3FE9FF] - //static let CURVE_Gx:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x12F3C908,0xF553917,0x1FA9A35F,0xBCC91B,0x1AACA0C,0x1779ED96,0x156BABAF,0x1F1F1989,0xDAD8D4] - - // MF256 Modulus, Montgomery Curve - //static let CURVETYPE = MONTGOMERY - //static let CURVE_A:Int32 = -54314 - //static let CURVE_B:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - //static let CURVE_Order:[Int32]=[0x18EC7BAB,0x16C976F6,0x19CCF259,0x9775F70,0x1FFFFB15,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3FE9FF] - //static let CURVE_Gx:[Int32]=[0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - - // MS256, Weierstrass Curve - //static let CURVETYPE = WEIERSTRASS - //static let CURVE_A:Int32 = -3 - //static let CURVE_B:[Int32]=[0x25581,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Order:[Int32]=[0x751A825,0x559014A,0x9971808,0x1904EBD4,0x1FFFFE43,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF] - //static let CURVE_Gx:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x2B56C77,0x1FA31836,0x253B042,0x185F26EB,0xDD6BD02,0x4B66777,0x1B5FF20B,0xA783C8C,0x696F18] - - // MS256, Edwards Curve - //static let CURVETYPE = EDWARDS - //static let CURVE_A:Int32 = -1; - //static let CURVE_B:[Int32]=[0x3BEE,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Order:[Int32]=[0x1122B4AD,0xDC27378,0x9AF1939,0x154AB5A1,0x1FFFFBE6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3FFFFF] - //static let CURVE_Gx:[Int32]=[0xD,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x131CADBA,0x3FB7DA9,0x134C0FDC,0x14DAC704,0x46BFBE2,0x1859CFD0,0x1B6E8F4C,0x3C5424E,0x7D0AB4] - - // MS256 Modulus, Montgomery Curve - //static let CURVETYPE = MONTGOMERY - //static let CURVE_A:Int32 = -61370 - //static let CURVE_B:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - //static let CURVE_Order:[Int32]=[0x1122B4AD,0xDC27378,0x9AF1939,0x154AB5A1,0x1FFFFBE6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3FFFFF] - //static let CURVE_Gx:[Int32]=[0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - //static let CURVE_Gy:[Int32]=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] // not used - - // Brainpool - //static let CURVETYPE = WEIERSTRASS - //static let CURVE_A:Int32 = -3 - //static let CURVE_B:[Int32]=[0x1EE92B04,0x172C080F,0xBD2495A,0x7D7895E,0x176B7BF9,0x13B99E85,0x1A93F99A,0x18861B09,0x662C61] - //static let CURVE_Order:[Int32]=[0x174856A7,0xF07414,0x1869BDE4,0x12F5476A,0x18D718C3,0x5484EC1,0x6F0F998,0x1B743DD5,0xA9FB57] - //static let CURVE_Gx:[Int32]=[0xE1305F4,0xD0C8AB1,0xBEF0ADE,0x28588F5,0x16149AFA,0x9D91D32,0x1EDDCC88,0x79839FC,0xA3E8EB] - //static let CURVE_Gy:[Int32]=[0x1B25C9BE,0xD5F479A,0x1409C007,0x196DBC73,0x417E69B,0x1170A322,0x15B5FDEC,0x10468738,0x2D996C] - - // ANSSI - //static let CURVETYPE = WEIERSTRASS - //static let CURVE_A:Int32 = -3; - //static let CURVE_B:[Int32]=[0x1B7BB73F,0x3AF6CB3,0xC68600C,0x181935C9,0xC00FDFE,0x1D3AA522,0x4C0352A,0x194A8515,0xEE353F] - //static let CURVE_Order:[Int32]=[0x6D655E1,0x1FEEA2CE,0x14AFE507,0x18CFC281,0x435B53D,0x16F46721,0x163C4049,0x1181675A,0xF1FD17] - //static let CURVE_Gx:[Int32]=[0x198F5CFF,0x64BD16E,0x62DC059,0xFA5B95F,0x23958C2,0x1EA3A4EA,0x7ACC460,0x186AD827,0xB6B3D4] - //static let CURVE_Gy:[Int32]=[0x14062CFB,0x188AD0AA,0x19327860,0x3860FD1,0xEF8C270,0x18F879F6,0x12447E49,0x1EF91640,0x6142E0] - - // BNCX Curve - - static let CURVETYPE = WEIERSTRASS - static let CURVE_A:Int32 = 0 - static let CURVE_B:[Int32]=[0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - static let CURVE_Order:[Int32]=[0x16EB1F6D,0x108E0531,0x1241B3AF,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000] - static let CURVE_Bnx:[Int32]=[0x3C012B1,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0] - static let CURVE_Cru:[Int32]=[0x14235C97,0xF0498BC,0x1BE1D58C,0x1BBEC8E3,0x3F1440B,0x654,0x12000,0x0,0x0] - static let CURVE_Fra:[Int32]=[0x15C80EA3,0x1EC8419A,0x1CFE0856,0xEE64DE2,0x11898686,0x5C55653,0x592BF86,0x5F4C740,0x135908] - static let CURVE_Frb:[Int32]=[0x6534710,0x1468DDE0,0x551B018,0x10C78E4D,0x4E3ABBD,0x9ECE6DE,0x2A40371,0x1A0C46C5,0x10A6F7] - static let CURVE_Pxa:[Int32]=[0x4D2EC74,0x428E777,0xF89C9B0,0x190B7F40,0x14BBB907,0x12807AE1,0x958D62C,0x58E0A76,0x19682D] - static let CURVE_Pxb:[Int32]=[0xE29CFE1,0x1D2C7459,0x270C3D1,0x172F6184,0x19743F81,0x49BD474,0x192A8047,0x1D87C33E,0x1466B9] - static let CURVE_Pya:[Int32]=[0xF0BE09F,0x7DFE75E,0x1FB06CC3,0x3667B08,0xE209636,0x110ABED7,0xE376078,0x1B2E4665,0xA79ED] - static let CURVE_Pyb:[Int32]=[0x898EE9D,0xC825914,0x14BB7AFB,0xC9D4AD3,0x13461C28,0x122896C6,0x240D71B,0x73D9898,0x6160C] - static let CURVE_Gx:[Int32]=[0x1C1B55B2,0x13311F7A,0x24FB86F,0x1FADDC30,0x166D3243,0xFB23D31,0x836C2F7,0x10E05,0x240000] - static let CURVE_Gy:[Int32]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0] - static let CURVE_W:[[Int32]]=[[0x162FEB83,0x2A31A48,0x100E0480,0x16,0x600,0x0,0x0,0x0,0x0],[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0]] - - - static let CURVE_SB:[[[Int32]]]=[[[0x1DB010E4,0x2A31A48,0x100E04A0,0x16,0x600,0x0,0x0,0x0,0x0],[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0xBB33EA,0xDEAEAE9,0x233AF2F,0x1FADDC03,0x166D2643,0xFB23D31,0x836C2F7,0x10E05,0x240000]]] - - static let CURVE_WB:[[Int32]]=[[0x167A84B0,0xE108C2,0x1004AC10,0x7,0x200,0x0,0x0,0x0,0x0],[0x1E220475,0x166FCCAD,0x129FE68D,0x1D29DB51,0x2A0DC07,0x438,0xC000,0x0,0x0],[0xF10B93,0x1B37E657,0x194FF34E,0x1E94EDA8,0x1506E03,0x21C,0x6000,0x0,0x0],[0x1DFAAA11,0xE108C2,0x1004AC30,0x7,0x200,0x0,0x0,0x0,0x0]] - - static let CURVE_BB:[[[Int32]]]=[[[0x132B0CBD,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x132B0CBC,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x132B0CBC,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x7802562,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x132B0CBC,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x132B0CBD,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x132B0CBC,0x108E0531,0x1241B39F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000]],[[0x7802562,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x7802561,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x3C012B2,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0],[0xF004AC2,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0],[0xF6AFA0A,0x108E0531,0x1241B 38F,0x1FADDC19,0x166D2C43,0xFB23D31,0x836C2F7,0x10E05,0x240000],[0x3C012B2,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0]]] - - static let USE_GLV = true - static let USE_GS_G2 = true - static let USE_GS_GT = true - static let GT_STRONG = true - -} - http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/70e3a3a3/swift/rsa.swift ---------------------------------------------------------------------- diff --git a/swift/rsa.swift b/swift/rsa.swift deleted file mode 100644 index 1c6ac27..0000000 --- a/swift/rsa.swift +++ /dev/null @@ -1,323 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ -// -// rsa.swift -// -// -// Created by Michael Scott on 25/06/2015. -// Copyright (c) 2015 Michael Scott. All rights reserved. -// - -import Foundation - -/* RSA API high-level functions */ - -final public class rsa_private_key { - var p:FF - var q:FF - var dp:FF - var dq:FF - var c:FF - - public init(_ n: Int) - { - p=FF(n); - q=FF(n); - dp=FF(n); - dq=FF(n); - c=FF(n); - } -} - -final public class rsa_public_key -{ - var e:Int32 - var n:FF - - public init(_ m:Int) - { - e=0; - n=FF(m); - } -} - -final public class RSA { - - static public let RFS=Int(ROM.MODBYTES)*ROM.FFLEN - - /* generate an RSA key pair */ - - static public func KEY_PAIR(rng: RAND,_ e:Int32,_ PRIV:rsa_private_key,_ PUB:rsa_public_key) - { /* IEEE1363 A16.11/A16.12 more or less */ - - let n=PUB.n.getlen()/2; - let t = FF(n); - let p1=FF(n); - let q1=FF(n); - - while true - { - - PRIV.p.random(rng); - while PRIV.p.lastbits(2) != 3 {PRIV.p.inc(1)} - while !FF.prime(PRIV.p,rng) {PRIV.p.inc(4)} - - p1.copy(PRIV.p); - p1.dec(1); - - if p1.cfactor(e) {continue} - break; - } - - while true - { - PRIV.q.random(rng); - while PRIV.q.lastbits(2) != 3 {PRIV.q.inc(1)} - while !FF.prime(PRIV.q,rng) {PRIV.q.inc(4)} - - q1.copy(PRIV.q); - q1.dec(1); - - if q1.cfactor(e) {continue} - - break; - } - - PUB.n=FF.mul(PRIV.p,PRIV.q); - PUB.e=e; - - t.copy(p1); - t.shr(); - PRIV.dp.set(e); - PRIV.dp.invmodp(t); - if (PRIV.dp.parity()==0) {PRIV.dp.add(t)} - PRIV.dp.norm(); - - t.copy(q1); - t.shr(); - PRIV.dq.set(e); - PRIV.dq.invmodp(t); - if (PRIV.dq.parity()==0) {PRIV.dq.add(t)} - PRIV.dq.norm(); - - PRIV.c.copy(PRIV.p); - PRIV.c.invmodp(PRIV.q); - - return; - } - /* Mask Generation Function */ - - static func MGF1(Z: [UInt8],_ olen:Int,inout _ K:[UInt8]) - { - let H=HASH(); - let hlen=HASH.len; - - var k=0; - for var i=0;i<K.count;i++ {K[i]=0} - - var cthreshold=Int32(olen/hlen); if (olen%hlen != 0) {cthreshold++} - for var counter:Int32=0;counter<cthreshold;counter++ - { - H.process_array(Z); - H.process_num(counter); - var B=H.hash(); - - if (k+hlen>olen) {for var i=0;i<olen%hlen;i++ {K[k++]=B[i]}} - else {for var i=0;i<hlen;i++ {K[k++]=B[i]}} - } - } - - static public func printBinary(array: [UInt8]) - { - for var i=0;i<array.count;i++ - { - let h=String(array[i],radix:16) - print("\(h)", terminator: "") - } - print(""); - } - /* OAEP Message Encoding for Encryption */ - static public func OAEP_ENCODE(m:[UInt8],_ rng:RAND,_ p:[UInt8]?) -> [UInt8] - { - let olen=RFS-1; - let mlen=m.count; - var f=[UInt8](count:RSA.RFS,repeatedValue:0) - - let H=HASH(); - let hlen=HASH.len; - var SEED=[UInt8](count:hlen,repeatedValue:0) - let seedlen=hlen; - if (mlen>olen-hlen-seedlen-1) {return [UInt8]()} - - var DBMASK=[UInt8](count:olen-seedlen,repeatedValue:0) - - if ((p) != nil) {H.process_array(p!)} - var h=H.hash(); - for var i=0;i<hlen;i++ {f[i]=h[i]} - - let slen=olen-mlen-hlen-seedlen-1; - - for var i=0;i<slen;i++ {f[hlen+i]=0} - f[hlen+slen]=1; - for var i=0;i<mlen;i++ {f[hlen+slen+1+i]=m[i]} - - for var i=0;i<seedlen;i++ {SEED[i]=rng.getByte()} - RSA.MGF1(SEED,olen-seedlen,&DBMASK) - - for var i=0;i<olen-seedlen;i++ {DBMASK[i]^=f[i]} - RSA.MGF1(DBMASK,seedlen,&f) - - for var i=0;i<seedlen;i++ {f[i]^=SEED[i]} - - for var i=0;i<olen-seedlen;i++ {f[i+seedlen]=DBMASK[i]} - - /* pad to length RFS */ - let d:Int=1; - for var i=RFS-1;i>=d;i-- - {f[i]=f[i-d]} - for var i=d-1;i>=0;i-- - {f[i]=0} - - return f; - } - - /* OAEP Message Decoding for Decryption */ - static public func OAEP_DECODE(p: [UInt8]?,inout _ f:[UInt8]) -> [UInt8] - { - let olen=RFS-1 - var k:Int - let H=HASH() - var hlen=HASH.len - var SEED=[UInt8](count:hlen,repeatedValue:0) - var seedlen=hlen - var CHASH=[UInt8](count:hlen,repeatedValue:0) - seedlen=32; hlen=32 - if olen<seedlen+hlen+1 {return [UInt8()]} - var DBMASK=[UInt8](count:olen-seedlen,repeatedValue:0) - for var i=0;i<olen-seedlen;i++ {DBMASK[i]=0} - - if (f.count<RSA.RFS) - { - let d=RSA.RFS-f.count; - for var i=RSA.RFS-1;i>=d;i-- - {f[i]=f[i-d]} - for var i=d-1;i>=0;i-- - {f[i]=0} - - } - - if (p != nil) {H.process_array(p!)} - var h=H.hash(); - for var i=0;i<hlen;i++ {CHASH[i]=h[i]} - - let x=f[0]; - - for var i=seedlen;i<olen;i++ - {DBMASK[i-seedlen]=f[i+1]} - - RSA.MGF1(DBMASK,seedlen,&SEED); - for var i=0;i<seedlen;i++ {SEED[i]^=f[i+1]} - RSA.MGF1(SEED,olen-seedlen,&f); - for var i=0;i<olen-seedlen;i++ {DBMASK[i]^=f[i]} - - var comp=true; - for var i=0;i<hlen;i++ - { - if (CHASH[i] != DBMASK[i]) {comp=false} - } - - for var i=0;i<olen-seedlen-hlen;i++ - {DBMASK[i]=DBMASK[i+hlen]} - - for var i=0;i<hlen;i++ - {SEED[i]=0;CHASH[i]=0;} - - for k=0;;k++ - { - if (k>=olen-seedlen-hlen) {return [UInt8]()} - if (DBMASK[k] != 0) {break} - } - - let t=DBMASK[k]; - if (!comp || x != 0 || t != 0x01) - { - for var i=0;i<olen-seedlen;i++ {DBMASK[i]=0} - return [UInt8]() - } - - var r=[UInt8](count:olen-seedlen-hlen-k-1,repeatedValue:0) - - for var i=0;i<olen-seedlen-hlen-k-1;i++ - {r[i]=DBMASK[i+k+1]} - - for var i=0;i<olen-seedlen;i++ {DBMASK[i]=0} - - return r; - } - /* destroy the Private Key structure */ - static public func PRIVATE_KEY_KILL(PRIV: rsa_private_key) - { - PRIV.p.zero(); - PRIV.q.zero(); - PRIV.dp.zero(); - PRIV.dq.zero(); - PRIV.c.zero(); - } - /* RSA encryption with the public key */ - static public func ENCRYPT(PUB: rsa_public_key,_ F:[UInt8],inout _ G:[UInt8]) - { - let n=PUB.n.getlen() - let f=FF(n) - - FF.fromBytes(f,F) - f.power(PUB.e,PUB.n) - f.toBytes(&G) - } - /* RSA decryption with the private key */ - static public func DECRYPT(PRIV: rsa_private_key,_ G:[UInt8],inout _ F:[UInt8]) - { - let n=PRIV.p.getlen() - let g=FF(2*n) - - FF.fromBytes(g,G) - let jp=g.dmod(PRIV.p) - var jq=g.dmod(PRIV.q) - - jp.skpow(PRIV.dp,PRIV.p) - jq.skpow(PRIV.dq,PRIV.q) - - g.zero() - g.dscopy(jp) - jp.mod(PRIV.q) - if (FF.comp(jp,jq)>0) {jq.add(PRIV.q)} - jq.sub(jp) - jq.norm() - - var t=FF.mul(PRIV.c,jq) - jq=t.dmod(PRIV.q) - - t=FF.mul(jq,PRIV.p) - g.add(t); - g.norm(); - - g.toBytes(&F); - } - -} -
