2008-03-05 09:52:00 -05:00
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// Microsoft Research Singularity
|
|
|
|
//
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
//
|
|
|
|
// File: Service/CredentialsManager/Credentials.sg
|
|
|
|
//
|
|
|
|
// Note: Classes for representing credentials and evidence.
|
|
|
|
//
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Collections;
|
|
|
|
using System.Diagnostics;
|
|
|
|
using Microsoft.Contracts;
|
|
|
|
using Microsoft.Singularity;
|
|
|
|
using Microsoft.Singularity.Channels;
|
|
|
|
using Microsoft.Singularity.Directory;
|
|
|
|
using Microsoft.Singularity.Io;
|
|
|
|
using Microsoft.SingSharp;
|
|
|
|
using Ex = Microsoft.Singularity.Security;
|
|
|
|
|
|
|
|
namespace Microsoft.Singularity.Security.CredentialsManager
|
|
|
|
{
|
2008-11-17 18:29:00 -05:00
|
|
|
///
|
|
|
|
//<summary>
|
|
|
|
// <para>
|
|
|
|
// This class contains a set of credentials, including sensitive "private" info,
|
|
|
|
// such as passwords, private keys, etc. The Credentials Manager allows clients
|
|
|
|
// to create these entries, enumerate them, etc., but never allows the private
|
|
|
|
// info to flow out of the credentials manager. The CM also allows clients to
|
|
|
|
// create "supplicants", which are instances of security protocols that are
|
|
|
|
// allowed to make use of the private info, but not to expose it.
|
|
|
|
// </para>
|
|
|
|
//</summary>
|
|
|
|
//
|
2008-03-05 09:52:00 -05:00
|
|
|
class Credentials
|
|
|
|
{
|
|
|
|
public Credentials(CredentialsId! id, CredentialsEvidence! evidence)
|
|
|
|
{
|
|
|
|
this.Id = id;
|
|
|
|
this.Evidence = evidence;
|
|
|
|
}
|
|
|
|
|
|
|
|
public CredentialsId! Id;
|
|
|
|
public CredentialsEvidence! Evidence;
|
|
|
|
}
|
|
|
|
|
2008-11-17 18:29:00 -05:00
|
|
|
///
|
|
|
|
//<summary>
|
|
|
|
// <para>
|
|
|
|
// This class is used as a key in Hashtable, so it implements identity comparison
|
|
|
|
// methods, including Object.GetHashCode(), operator==, operator!=, and Object.Equals().
|
|
|
|
// </para>
|
|
|
|
// <para>
|
|
|
|
// Instances of this class are immutable.
|
|
|
|
// </para>
|
|
|
|
//</summary>
|
|
|
|
//
|
2008-03-05 09:52:00 -05:00
|
|
|
class CredentialsId
|
|
|
|
{
|
|
|
|
public CredentialsId(string! name, string! tag)
|
|
|
|
{
|
|
|
|
this.CredentialsName = name;
|
|
|
|
this.Tag = tag;
|
|
|
|
}
|
|
|
|
|
|
|
|
public CredentialsId(Ex.CredentialsId excredentials)
|
|
|
|
{
|
|
|
|
this(
|
|
|
|
Bitter.ToString2(excredentials.CredentialsName),
|
|
|
|
Bitter.ToString2(excredentials.Tag));
|
|
|
|
}
|
|
|
|
|
|
|
|
public readonly string! CredentialsName;
|
|
|
|
public readonly string! Tag;
|
|
|
|
|
|
|
|
override public string! ToString()
|
|
|
|
{
|
|
|
|
return String.Format("[CredentialsId: name:{0} tag:{1}]", this.CredentialsName, this.Tag);
|
|
|
|
}
|
|
|
|
|
|
|
|
public Ex.CredentialsId ToExchange()
|
|
|
|
{
|
|
|
|
Ex.CredentialsId ex = new Ex.CredentialsId();
|
|
|
|
ex.CredentialsName = Bitter.FromString2(this.CredentialsName);
|
|
|
|
ex.Tag = Bitter.FromString2(this.Tag);
|
|
|
|
return ex;
|
|
|
|
}
|
|
|
|
|
|
|
|
override public int GetHashCode()
|
|
|
|
{
|
|
|
|
return unchecked((int)(CredentialsName.GetHashCode() + 3 * Tag.GetHashCode()));
|
|
|
|
}
|
|
|
|
|
|
|
|
override public bool Equals(object obj)
|
|
|
|
{
|
|
|
|
CredentialsId comparand = obj as CredentialsId;
|
|
|
|
if (comparand == null)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return this == comparand;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static bool operator== (CredentialsId! a, CredentialsId! b)
|
|
|
|
{
|
|
|
|
return a.CredentialsName == b.CredentialsName && a.Tag == b.Tag;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static bool operator!= (CredentialsId! a, CredentialsId! b)
|
|
|
|
{
|
|
|
|
return a.CredentialsName != b.CredentialsName || a.Tag != b.Tag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Base class for classes that provide evidence of ownership of a key.
|
|
|
|
abstract class CredentialsEvidence
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
class PasswordEvidence : CredentialsEvidence
|
|
|
|
{
|
|
|
|
public PasswordEvidence(string! password)
|
|
|
|
{
|
|
|
|
this.Password = password;
|
|
|
|
}
|
|
|
|
|
|
|
|
public readonly string! Password;
|
|
|
|
}
|
|
|
|
|
2008-11-17 18:29:00 -05:00
|
|
|
//
|
|
|
|
//class PrivateKeyEvidence : CredentialsEvidence
|
|
|
|
//{
|
|
|
|
// ???
|
|
|
|
//}
|
|
|
|
//
|
2008-03-05 09:52:00 -05:00
|
|
|
}
|
|
|
|
|