Skip to content

IKE Crypto Profile Models

The IKE Crypto Profile models provide data validation and serialization for IKE Crypto Profiles in Strata Cloud Manager (SCM).

Model Imports

from scm.models.network import (
    IKECryptoProfileCreateModel,
    IKECryptoProfileUpdateModel,
    IKECryptoProfileResponseModel,
    HashAlgorithm,
    EncryptionAlgorithm,
    DHGroup,
    LifetimeSeconds,
    LifetimeMinutes,
    LifetimeHours,
    LifetimeDays,
)

Enum Types

HashAlgorithm

Defines the hash algorithm options for IKE crypto profiles:

class HashAlgorithm(str, Enum):
    MD5 = "md5"
    SHA1 = "sha1"
    SHA256 = "sha256"
    SHA384 = "sha384"
    SHA512 = "sha512"

EncryptionAlgorithm

Defines the encryption algorithm options for IKE crypto profiles:

class EncryptionAlgorithm(str, Enum):
    DES = "des"
    THREE_DES = "3des"
    AES_128_CBC = "aes-128-cbc"
    AES_192_CBC = "aes-192-cbc"
    AES_256_CBC = "aes-256-cbc"
    AES_128_GCM = "aes-128-gcm"
    AES_256_GCM = "aes-256-gcm"

DHGroup

Defines the Diffie-Hellman group options for IKE crypto profiles:

class DHGroup(str, Enum):
    GROUP1 = "group1"
    GROUP2 = "group2"
    GROUP5 = "group5"
    GROUP14 = "group14"
    GROUP19 = "group19"
    GROUP20 = "group20"

Lifetime Models

IKE Crypto Profiles support four different lifetime units. Each has its own model with validation:

LifetimeSeconds

class LifetimeSeconds(BaseModel):
    seconds: int = Field(
        ...,
        description="Specify lifetime in seconds",
        ge=180,
        le=65535,
    )

LifetimeMinutes

class LifetimeMinutes(BaseModel):
    minutes: int = Field(
        ...,
        description="Specify lifetime in minutes",
        ge=3,
        le=65535,
    )

LifetimeHours

class LifetimeHours(BaseModel):
    hours: int = Field(
        ...,
        description="Specify lifetime in hours",
        ge=1,
        le=65535,
    )

LifetimeDays

class LifetimeDays(BaseModel):
    days: int = Field(
        ...,
        description="Specify lifetime in days",
        ge=1,
        le=365,
    )

Base Model

The IKECryptoProfileBaseModel serves as the foundation for all IKE Crypto Profile models:

class IKECryptoProfileBaseModel(BaseModel):
    model_config = ConfigDict(
        populate_by_name=True,
        validate_assignment=True,
        arbitrary_types_allowed=True,
    )

    name: str = Field(
        ...,
        description="The name of the IKE crypto profile",
        pattern=r"^[0-9a-zA-Z._-]+$",
        max_length=31,
    )
    hash: List[HashAlgorithm] = Field(
        ...,
        description="Hashing algorithms",
    )
    encryption: List[EncryptionAlgorithm] = Field(
        ...,
        description="Encryption algorithms",
    )
    dh_group: List[DHGroup] = Field(
        ...,
        description="Phase-1 DH group",
    )
    lifetime: Optional[LifetimeType] = Field(
        None,
        description="Lifetime configuration",
    )
    authentication_multiple: Optional[int] = Field(
        0,
        description="IKEv2 SA reauthentication interval equals authetication-multiple * rekey-lifetime; 0 means reauthentication disabled",
        ge=0,
        le=50,
    )

    # Container fields
    folder: Optional[str] = Field(
        None,
        pattern=r"^[a-zA-Z\d\-_. ]+$",
        max_length=64,
        description="The folder in which the resource is defined",
    )
    snippet: Optional[str] = Field(
        None,
        pattern=r"^[a-zA-Z\d\-_. ]+$",
        max_length=64,
        description="The snippet in which the resource is defined",
    )
    device: Optional[str] = Field(
        None,
        pattern=r"^[a-zA-Z\d\-_. ]+$",
        max_length=64,
        description="The device in which the resource is defined",
    )

Create Model

Used for creating new IKE Crypto Profiles:

class IKECryptoProfileCreateModel(IKECryptoProfileBaseModel):
    """Model for creating new IKE Crypto Profiles."""

    @model_validator(mode="after")
    def validate_container(self) -> "IKECryptoProfileCreateModel":
        container_fields = ["folder", "snippet", "device"]
        provided = [
            field for field in container_fields if getattr(self, field) is not None
        ]
        if len(provided) != 1:
            raise ValueError(
                "Exactly one of 'folder', 'snippet', or 'device' must be provided."
            )
        return self

Update Model

Used for updating existing IKE Crypto Profiles:

class IKECryptoProfileUpdateModel(IKECryptoProfileBaseModel):
    """Model for updating existing IKE Crypto Profiles."""

    id: UUID = Field(
        ...,
        description="The UUID of the IKE crypto profile",
        examples=["123e4567-e89b-12d3-a456-426655440000"],
    )

Response Model

Represents IKE Crypto Profiles returned from the API:

class IKECryptoProfileResponseModel(IKECryptoProfileBaseModel):
    """Model for IKE Crypto Profile responses."""

    id: UUID = Field(
        ...,
        description="The UUID of the IKE crypto profile",
        examples=["123e4567-e89b-12d3-a456-426655440000"],
    )

Usage Examples

Creating a Profile

from scm.models.network import (
    IKECryptoProfileCreateModel,
    HashAlgorithm,
    EncryptionAlgorithm,
    DHGroup,
)

# Using the model directly
profile_data = {
    "name": "example-ike-crypto",
    "hash": [HashAlgorithm.SHA1, HashAlgorithm.SHA256],
    "encryption": [
        EncryptionAlgorithm.AES_128_CBC,
        EncryptionAlgorithm.AES_256_CBC
    ],
    "dh_group": [DHGroup.GROUP2, DHGroup.GROUP5],
    "lifetime": {"hours": 8},
    "folder": "Example-Folder",
}

# Create the model and validate
profile_model = IKECryptoProfileCreateModel(**profile_data)

# Access properties
print(f"Profile name: {profile_model.name}")
print(f"Hash algorithms: {[h.value for h in profile_model.hash]}")

Updating a Profile

from scm.models.network import IKECryptoProfileUpdateModel

# Create update model
update_data = {
    "id": "123e4567-e89b-12d3-a456-426655440000",
    "name": "example-ike-crypto",
    "hash": [HashAlgorithm.SHA256, HashAlgorithm.SHA384],
    "encryption": [
        EncryptionAlgorithm.AES_256_CBC,
        EncryptionAlgorithm.AES_256_GCM,
    ],
    "dh_group": [DHGroup.GROUP5, DHGroup.GROUP14],
    "lifetime": {"days": 1},
    "folder": "Example-Folder"
}

update_model = IKECryptoProfileUpdateModel(**update_data)

# Convert model to dict for API request
payload = update_model.model_dump(exclude_unset=True, by_alias=True)

Handling Responses

from scm.models.network import IKECryptoProfileResponseModel

# Parse API response into model
response_data = {
    "id": "123e4567-e89b-12d3-a456-426655440000",
    "name": "example-ike-crypto",
    "hash": ["sha1", "sha256"],
    "encryption": ["aes-128-cbc", "aes-256-cbc"],
    "dh_group": ["group2", "group5"],
    "lifetime": {"hours": 8},
    "folder": "Example-Folder",
}

response_model = IKECryptoProfileResponseModel(**response_data)

# Access model properties
print(f"Profile ID: {response_model.id}")
print(f"Hash algorithms: {[h.value for h in response_model.hash]}")
print(f"Using SHA1: {HashAlgorithm.SHA1 in response_model.hash}")