Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit 61d27c3

Browse files
KevinRansomnosami
authored andcommitted
signing (dotnet#10108)
1 parent 3eb03a4 commit 61d27c3

File tree

11 files changed

+376
-343
lines changed

11 files changed

+376
-343
lines changed

src/absil/il.fsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ type ILScopeRef =
9898
/// A reference to the type in the current module
9999
| Local
100100
/// A reference to a type in a module in the same assembly
101-
| Module of ILModuleRef
101+
| Module of ILModuleRef
102102
/// A reference to a type in another assembly
103103
| Assembly of ILAssemblyRef
104104
/// A reference to a type in the primary assembly

src/absil/ilsign.fs

Lines changed: 328 additions & 7 deletions
Large diffs are not rendered by default.

src/absil/ilsign.fsi

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
2+
3+
/// Functions associated with signing il assemblies which
4+
/// vary between supported implementations of the CLI Common Language
5+
/// Runtime, e.g. between the SSCLI, Mono and the Microsoft CLR.
6+
///
7+
8+
module internal FSharp.Compiler.AbstractIL.Internal.StrongNameSign
9+
10+
//---------------------------------------------------------------------
11+
// Strong name signing
12+
//---------------------------------------------------------------------
13+
[<Sealed>]
14+
type ILStrongNameSigner =
15+
member PublicKey: byte[]
16+
static member OpenPublicKeyOptions: string -> bool -> ILStrongNameSigner
17+
static member OpenPublicKey: byte[] -> ILStrongNameSigner
18+
static member OpenKeyPairFile: string -> ILStrongNameSigner
19+
static member OpenKeyContainer: string -> ILStrongNameSigner
20+
member Close: unit -> unit
21+
member IsFullySigned: bool
22+
member PublicKey: byte[]
23+
member SignatureSize: int
24+
member SignFile: string -> unit

src/absil/ilsupp.fs

Lines changed: 0 additions & 232 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,235 +1118,3 @@ let pdbVariableGetSignature (variable: PdbVariable) : byte[] =
11181118
let pdbVariableGetAddressAttributes (variable: PdbVariable) : (int32 * int32) =
11191119
(int32 variable.symVariable.AddressKind, variable.symVariable.AddressField1)
11201120
#endif
1121-
1122-
// Key signing
1123-
type keyContainerName = string
1124-
type keyPair = byte[]
1125-
type pubkey = byte[]
1126-
type pubkeyOptions = byte[] * bool
1127-
1128-
#if FX_NO_CORHOST_SIGNER
1129-
1130-
let signerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath
1131-
1132-
let signerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath
1133-
1134-
let signerGetPublicKeyForKeyPair (kp: keyPair) : pubkey =
1135-
let reply = (StrongNameSign.getPublicKeyForKeyPair kp)
1136-
reply
1137-
1138-
let signerGetPublicKeyForKeyContainer (_kcName: keyContainerName) : pubkey =
1139-
raise (NotImplementedException("signerGetPublicKeyForKeyContainer is not yet implemented"))
1140-
1141-
let signerCloseKeyContainer (_kc: keyContainerName) : unit =
1142-
raise (NotImplementedException("signerCloseKeyContainer is not yet implemented"))
1143-
1144-
let signerSignatureSize (pk: pubkey) : int =
1145-
(StrongNameSign.signatureSize pk)
1146-
1147-
let signerSignFileWithKeyPair (fileName: string) (kp: keyPair) : unit =
1148-
(StrongNameSign.signFile fileName kp)
1149-
1150-
let signerSignFileWithKeyContainer (_fileName: string) (_kcName: keyContainerName) : unit =
1151-
raise (NotImplementedException("signerSignFileWithKeyContainer is not yet implemented"))
1152-
1153-
#else
1154-
// New mscoree functionality
1155-
// This type represents methods that we don't currently need, so I'm leaving unimplemented
1156-
type UnusedCOMMethod = unit -> unit
1157-
[<System.Security.SecurityCritical; Interface>]
1158-
[<ComImport; InterfaceType(ComInterfaceType.InterfaceIsIUnknown); Guid("D332DB9E-B9B3-4125-8207-A14884F53216")>]
1159-
type ICLRMetaHost =
1160-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1161-
abstract GetRuntime:
1162-
[<In; MarshalAs(UnmanagedType.LPWStr)>] version: string *
1163-
[<In; MarshalAs(UnmanagedType.LPStruct)>] interfaceId: System.Guid -> [<MarshalAs(UnmanagedType.Interface)>] System.Object
1164-
1165-
// Methods that we don't need are stubbed out for now...
1166-
abstract GetVersionFromFile: UnusedCOMMethod
1167-
abstract EnumerateInstalledRuntimes: UnusedCOMMethod
1168-
abstract EnumerateLoadedRuntimes: UnusedCOMMethod
1169-
abstract Reserved01: UnusedCOMMethod
1170-
1171-
// We don't currently support ComConversionLoss
1172-
[<System.Security.SecurityCritical; Interface>]
1173-
[<ComImport; ComConversionLoss; InterfaceType(ComInterfaceType.InterfaceIsIUnknown); Guid("9FD93CCF-3280-4391-B3A9-96E1CDE77C8D")>]
1174-
type ICLRStrongName =
1175-
// Methods that we don't need are stubbed out for now...
1176-
abstract GetHashFromAssemblyFile: UnusedCOMMethod
1177-
abstract GetHashFromAssemblyFileW: UnusedCOMMethod
1178-
abstract GetHashFromBlob: UnusedCOMMethod
1179-
abstract GetHashFromFile: UnusedCOMMethod
1180-
abstract GetHashFromFileW: UnusedCOMMethod
1181-
abstract GetHashFromHandle: UnusedCOMMethod
1182-
abstract StrongNameCompareAssemblies: UnusedCOMMethod
1183-
1184-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1185-
abstract StrongNameFreeBuffer: [<In>] pbMemory: nativeint -> unit
1186-
1187-
abstract StrongNameGetBlob: UnusedCOMMethod
1188-
abstract StrongNameGetBlobFromImage: UnusedCOMMethod
1189-
1190-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1191-
abstract StrongNameGetPublicKey :
1192-
[<In; MarshalAs(UnmanagedType.LPWStr)>] pwzKeyContainer: string *
1193-
[<In; MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2s)>] pbKeyBlob: byte[] *
1194-
[<In; MarshalAs(UnmanagedType.U4)>] cbKeyBlob: uint32 *
1195-
[<Out>] ppbPublicKeyBlob: nativeint byref *
1196-
[<Out; MarshalAs(UnmanagedType.U4)>] pcbPublicKeyBlob: uint32 byref -> unit
1197-
1198-
abstract StrongNameHashSize: UnusedCOMMethod
1199-
1200-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1201-
abstract StrongNameKeyDelete: [<In; MarshalAs(UnmanagedType.LPWStr)>] pwzKeyContainer: string -> unit
1202-
1203-
abstract StrongNameKeyGen: UnusedCOMMethod
1204-
abstract StrongNameKeyGenEx: UnusedCOMMethod
1205-
abstract StrongNameKeyInstall: UnusedCOMMethod
1206-
1207-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1208-
abstract StrongNameSignatureGeneration :
1209-
[<In; MarshalAs(UnmanagedType.LPWStr)>] pwzFilePath: string *
1210-
[<In; MarshalAs(UnmanagedType.LPWStr)>] pwzKeyContainer: string *
1211-
[<In; MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3s)>] pbKeyBlob: byte [] *
1212-
[<In; MarshalAs(UnmanagedType.U4)>] cbKeyBlob: uint32 *
1213-
[<Out>] ppbSignatureBlob: nativeint *
1214-
[<MarshalAs(UnmanagedType.U4)>] pcbSignatureBlob: uint32 byref -> unit
1215-
1216-
abstract StrongNameSignatureGenerationEx: UnusedCOMMethod
1217-
1218-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1219-
abstract StrongNameSignatureSize :
1220-
[<In; MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1s)>] pbPublicKeyBlob: byte[] *
1221-
[<In; MarshalAs(UnmanagedType.U4)>] cbPublicKeyBlob: uint32 *
1222-
[<Out; MarshalAs(UnmanagedType.U4)>] pcbSize: uint32 byref -> unit
1223-
1224-
abstract StrongNameSignatureVerification: UnusedCOMMethod
1225-
1226-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1227-
abstract StrongNameSignatureVerificationEx :
1228-
[<In; MarshalAs(UnmanagedType.LPWStr)>] pwzFilePath: string *
1229-
[<In; MarshalAs(UnmanagedType.I1)>] fForceVerification: bool *
1230-
[<In; MarshalAs(UnmanagedType.I1)>] pfWasVerified: bool byref -> [<MarshalAs(UnmanagedType.I1)>] bool
1231-
1232-
abstract StrongNameSignatureVerificationFromImage: UnusedCOMMethod
1233-
abstract StrongNameTokenFromAssembly: UnusedCOMMethod
1234-
abstract StrongNameTokenFromAssemblyEx: UnusedCOMMethod
1235-
abstract StrongNameTokenFromPublicKey: UnusedCOMMethod
1236-
1237-
1238-
[<System.Security.SecurityCritical; Interface>]
1239-
[<ComImport; InterfaceType(ComInterfaceType.InterfaceIsIUnknown); Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")>]
1240-
type ICLRRuntimeInfo =
1241-
// REVIEW: Methods that we don't need will be stubbed out for now...
1242-
abstract GetVersionString: unit -> unit
1243-
abstract GetRuntimeDirectory: unit -> unit
1244-
abstract IsLoaded: unit -> unit
1245-
abstract LoadErrorString: unit -> unit
1246-
abstract LoadLibrary: unit -> unit
1247-
abstract GetProcAddress: unit -> unit
1248-
1249-
[<MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)>]
1250-
abstract GetInterface :
1251-
[<In; MarshalAs(UnmanagedType.LPStruct)>] coClassId: System.Guid *
1252-
[<In; MarshalAs(UnmanagedType.LPStruct)>] interfaceId: System.Guid -> [<MarshalAs(UnmanagedType.Interface)>]System.Object
1253-
1254-
[<System.Security.SecurityCritical>]
1255-
[<DllImport("mscoree.dll", SetLastError = true, PreserveSig=false, EntryPoint="CreateInterface")>]
1256-
let CreateInterface (
1257-
([<MarshalAs(UnmanagedType.LPStruct)>] _clsidguid: System.Guid),
1258-
([<MarshalAs(UnmanagedType.LPStruct)>] _guid: System.Guid),
1259-
([<MarshalAs(UnmanagedType.Interface)>] _metaHost :
1260-
ICLRMetaHost byref)) : unit = failwith "CreateInterface"
1261-
1262-
let signerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath
1263-
1264-
let signerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath
1265-
1266-
let mutable iclrsn: ICLRStrongName option = None
1267-
let getICLRStrongName () =
1268-
match iclrsn with
1269-
| None ->
1270-
let CLSID_CLRStrongName = System.Guid(0xB79B0ACDu, 0xF5CDus, 0x409bus, 0xB5uy, 0xA5uy, 0xA1uy, 0x62uy, 0x44uy, 0x61uy, 0x0Buy, 0x92uy)
1271-
let IID_ICLRStrongName = System.Guid(0x9FD93CCFu, 0x3280us, 0x4391us, 0xB3uy, 0xA9uy, 0x96uy, 0xE1uy, 0xCDuy, 0xE7uy, 0x7Cuy, 0x8Duy)
1272-
let CLSID_CLRMetaHost = System.Guid(0x9280188Du, 0x0E8Eus, 0x4867us, 0xB3uy, 0x0Cuy, 0x7Fuy, 0xA8uy, 0x38uy, 0x84uy, 0xE8uy, 0xDEuy)
1273-
let IID_ICLRMetaHost = System.Guid(0xD332DB9Eu, 0xB9B3us, 0x4125us, 0x82uy, 0x07uy, 0xA1uy, 0x48uy, 0x84uy, 0xF5uy, 0x32uy, 0x16uy)
1274-
let clrRuntimeInfoGuid = System.Guid(0xBD39D1D2u, 0xBA2Fus, 0x486aus, 0x89uy, 0xB0uy, 0xB4uy, 0xB0uy, 0xCBuy, 0x46uy, 0x68uy, 0x91uy)
1275-
1276-
let runtimeVer = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()
1277-
let mutable metaHost = Unchecked.defaultof<ICLRMetaHost>
1278-
CreateInterface(CLSID_CLRMetaHost, IID_ICLRMetaHost, &metaHost)
1279-
if Unchecked.defaultof<ICLRMetaHost> = metaHost then
1280-
failwith "Unable to obtain ICLRMetaHost object - check freshness of mscoree.dll"
1281-
let runtimeInfo = metaHost.GetRuntime(runtimeVer, clrRuntimeInfoGuid) :?> ICLRRuntimeInfo
1282-
let sn = runtimeInfo.GetInterface(CLSID_CLRStrongName, IID_ICLRStrongName) :?> ICLRStrongName
1283-
if Unchecked.defaultof<ICLRStrongName> = sn then
1284-
failwith "Unable to obtain ICLRStrongName object"
1285-
iclrsn <- Some sn
1286-
sn
1287-
| Some sn -> sn
1288-
1289-
let signerGetPublicKeyForKeyPair kp =
1290-
if runningOnMono then
1291-
let snt = System.Type.GetType("Mono.Security.StrongName")
1292-
let sn = System.Activator.CreateInstance(snt, [| box kp |])
1293-
snt.InvokeMember("PublicKey", (BindingFlags.GetProperty ||| BindingFlags.Instance ||| BindingFlags.Public), null, sn, [| |], Globalization.CultureInfo.InvariantCulture) :?> byte[]
1294-
else
1295-
let mutable pSize = 0u
1296-
let mutable pBuffer: nativeint = (nativeint)0
1297-
let iclrSN = getICLRStrongName()
1298-
1299-
iclrSN.StrongNameGetPublicKey(Unchecked.defaultof<string>, kp, (uint32) kp.Length, &pBuffer, &pSize) |> ignore
1300-
let mutable keybuffer: byte [] = Bytes.zeroCreate (int pSize)
1301-
// Copy the marshalled data over - we'll have to free this ourselves
1302-
Marshal.Copy(pBuffer, keybuffer, 0, int pSize)
1303-
iclrSN.StrongNameFreeBuffer pBuffer |> ignore
1304-
keybuffer
1305-
1306-
let signerGetPublicKeyForKeyContainer kc =
1307-
let mutable pSize = 0u
1308-
let mutable pBuffer: nativeint = (nativeint)0
1309-
let iclrSN = getICLRStrongName()
1310-
iclrSN.StrongNameGetPublicKey(kc, Unchecked.defaultof<byte[]>, 0u, &pBuffer, &pSize) |> ignore
1311-
let mutable keybuffer: byte [] = Bytes.zeroCreate (int pSize)
1312-
// Copy the marshalled data over - we'll have to free this ourselves later
1313-
Marshal.Copy(pBuffer, keybuffer, 0, int pSize)
1314-
iclrSN.StrongNameFreeBuffer pBuffer |> ignore
1315-
keybuffer
1316-
1317-
let signerCloseKeyContainer kc =
1318-
let iclrSN = getICLRStrongName()
1319-
iclrSN.StrongNameKeyDelete kc |> ignore
1320-
1321-
let signerSignatureSize (pk: byte[]) =
1322-
if runningOnMono then
1323-
if pk.Length > 32 then pk.Length - 32 else 128
1324-
else
1325-
let mutable pSize = 0u
1326-
let iclrSN = getICLRStrongName()
1327-
iclrSN.StrongNameSignatureSize(pk, uint32 pk.Length, &pSize) |> ignore
1328-
int pSize
1329-
1330-
let signerSignFileWithKeyPair fileName kp =
1331-
if runningOnMono then
1332-
let snt = System.Type.GetType("Mono.Security.StrongName")
1333-
let sn = System.Activator.CreateInstance(snt, [| box kp |])
1334-
let conv (x: obj) = if (unbox x: bool) then 0 else -1
1335-
snt.InvokeMember("Sign", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, sn, [| box fileName |], Globalization.CultureInfo.InvariantCulture) |> conv |> check "Sign"
1336-
snt.InvokeMember("Verify", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, sn, [| box fileName |], Globalization.CultureInfo.InvariantCulture) |> conv |> check "Verify"
1337-
else
1338-
let mutable pcb = 0u
1339-
let mutable ppb = (nativeint)0
1340-
let mutable ok = false
1341-
let iclrSN = getICLRStrongName()
1342-
iclrSN.StrongNameSignatureGeneration(fileName, Unchecked.defaultof<string>, kp, uint32 kp.Length, ppb, &pcb) |> ignore
1343-
iclrSN.StrongNameSignatureVerificationEx(fileName, true, &ok) |> ignore
1344-
1345-
let signerSignFileWithKeyContainer fileName kcName =
1346-
let mutable pcb = 0u
1347-
let mutable ppb = (nativeint)0
1348-
let mutable ok = false
1349-
let iclrSN = getICLRStrongName()
1350-
iclrSN.StrongNameSignatureGeneration(fileName, kcName, Unchecked.defaultof<byte[]>, 0u, ppb, &pcb) |> ignore
1351-
iclrSN.StrongNameSignatureVerificationEx(fileName, true, &ok) |> ignore
1352-
#endif

src/absil/ilsupp.fsi

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ open System.Runtime.InteropServices
2424
#else
2525
open System.Diagnostics.SymbolStore
2626
#endif
27+
2728
open Internal.Utilities
2829
open FSharp.Compiler.AbstractIL
2930
open FSharp.Compiler.AbstractIL.Internal
@@ -109,21 +110,3 @@ val pdbSetMethodRange: PdbWriter -> PdbDocumentWriter -> int -> int -> PdbDocume
109110
val pdbDefineSequencePoints: PdbWriter -> PdbDocumentWriter -> (int * int * int * int * int) array -> unit
110111
val pdbWriteDebugInfo: PdbWriter -> idd
111112
#endif
112-
113-
//---------------------------------------------------------------------
114-
// Strong name signing
115-
//---------------------------------------------------------------------
116-
117-
type keyContainerName = string
118-
type keyPair = byte[]
119-
type pubkey = byte[]
120-
type pubkeyOptions = byte[] * bool
121-
122-
val signerOpenPublicKeyFile: string -> pubkey
123-
val signerOpenKeyPairFile: string -> keyPair
124-
val signerSignatureSize: pubkey -> int
125-
val signerGetPublicKeyForKeyPair: keyPair -> pubkey
126-
val signerGetPublicKeyForKeyContainer: string -> pubkey
127-
val signerCloseKeyContainer: keyContainerName -> unit
128-
val signerSignFileWithKeyPair: string -> keyPair -> unit
129-
val signerSignFileWithKeyContainer: string -> keyContainerName -> unit

src/absil/ilwrite.fs

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@ open FSharp.Compiler.AbstractIL.Internal.BinaryConstants
1313
open FSharp.Compiler.AbstractIL.Internal.Support
1414
open FSharp.Compiler.AbstractIL.Internal.Library
1515
open FSharp.Compiler.AbstractIL.Internal.Utils
16+
open FSharp.Compiler.AbstractIL.Internal.StrongNameSign
1617
open FSharp.Compiler.AbstractIL.ILPdbWriter
1718
open FSharp.Compiler.ErrorLogger
1819
open FSharp.Compiler.Range
19-
#if FX_NO_CORHOST_SIGNER
20-
open FSharp.Compiler.AbstractIL.Internal.StrongNameSign
21-
#endif
22-
2320

2421
#if DEBUG
2522
let showEntryLookups = false
@@ -146,66 +143,6 @@ let applyFixup32 (data: byte[]) offset v =
146143
data.[offset+2] <- b2 v
147144
data.[offset+3] <- b3 v
148145

149-
//---------------------------------------------------------------------
150-
// Strong name signing
151-
//---------------------------------------------------------------------
152-
153-
type ILStrongNameSigner =
154-
| PublicKeySigner of Support.pubkey
155-
| PublicKeyOptionsSigner of Support.pubkeyOptions
156-
| KeyPair of Support.keyPair
157-
| KeyContainer of Support.keyContainerName
158-
159-
static member OpenPublicKeyOptions s p = PublicKeyOptionsSigner((Support.signerOpenPublicKeyFile s), p)
160-
161-
static member OpenPublicKey pubkey = PublicKeySigner pubkey
162-
163-
static member OpenKeyPairFile s = KeyPair(Support.signerOpenKeyPairFile s)
164-
165-
static member OpenKeyContainer s = KeyContainer s
166-
167-
member s.Close() =
168-
match s with
169-
| PublicKeySigner _
170-
| PublicKeyOptionsSigner _
171-
| KeyPair _ -> ()
172-
| KeyContainer containerName -> Support.signerCloseKeyContainer containerName
173-
174-
member s.IsFullySigned =
175-
match s with
176-
| PublicKeySigner _ -> false
177-
| PublicKeyOptionsSigner pko -> let _, usePublicSign = pko
178-
usePublicSign
179-
| KeyPair _ | KeyContainer _ -> true
180-
181-
member s.PublicKey =
182-
match s with
183-
| PublicKeySigner pk -> pk
184-
| PublicKeyOptionsSigner pko -> let pk, _ = pko
185-
pk
186-
| KeyPair kp -> Support.signerGetPublicKeyForKeyPair kp
187-
| KeyContainer kn -> Support.signerGetPublicKeyForKeyContainer kn
188-
189-
member s.SignatureSize =
190-
let pkSignatureSize pk =
191-
try Support.signerSignatureSize pk
192-
with e ->
193-
failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")")
194-
0x80
195-
match s with
196-
| PublicKeySigner pk -> pkSignatureSize pk
197-
| PublicKeyOptionsSigner pko -> let pk, _ = pko
198-
pkSignatureSize pk
199-
| KeyPair kp -> pkSignatureSize (Support.signerGetPublicKeyForKeyPair kp)
200-
| KeyContainer kn -> pkSignatureSize (Support.signerGetPublicKeyForKeyContainer kn)
201-
202-
member s.SignFile file =
203-
match s with
204-
| PublicKeySigner _ -> ()
205-
| PublicKeyOptionsSigner _ -> ()
206-
| KeyPair kp -> Support.signerSignFileWithKeyPair file kp
207-
| KeyContainer kn -> Support.signerSignFileWithKeyContainer file kn
208-
209146
//---------------------------------------------------------------------
210147
// TYPES FOR TABLES
211148
//---------------------------------------------------------------------

src/absil/ilwrite.fsi

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,7 @@ open FSharp.Compiler.AbstractIL
88
open FSharp.Compiler.AbstractIL.Internal
99
open FSharp.Compiler.AbstractIL.IL
1010
open FSharp.Compiler.AbstractIL.ILPdbWriter
11-
12-
[<Sealed>]
13-
type ILStrongNameSigner =
14-
member PublicKey: byte[]
15-
static member OpenPublicKeyOptions: string -> bool -> ILStrongNameSigner
16-
static member OpenPublicKey: byte[] -> ILStrongNameSigner
17-
static member OpenKeyPairFile: string -> ILStrongNameSigner
18-
static member OpenKeyContainer: string -> ILStrongNameSigner
11+
open FSharp.Compiler.AbstractIL.Internal.StrongNameSign
1912

2013
type options =
2114
{ ilg: ILGlobals

0 commit comments

Comments
 (0)