---
name: "Mail::DKIM::Algorithm::Base"
section: "3pm"
platform: "linux"
package: "perl-mail-dkim"
version: "1.20240923-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Mail::DKIM::Algorithm::Base"
---

# Mail::DKIM::Algorithm::Base(3pm)

base class for DKIM "algorithms"

## NAME

Mail::DKIM::Algorithm::Base - base class for DKIM "algorithms"

## VERSION

version 1.20240923

## SYNOPSIS

```
  my $algorithm = new Mail::DKIM::Algorithm::rsa_sha1(
                      Signature => $dkim_signature
                  );
  # add headers
  $algorithm->add_header("Subject: this is the subject\015\012");
  $algorithm->finish_header;
  # add body
  $algorithm->add_body("This is the body.\015\012");
  $algorithm->add_body("Another line of the body.\015\012");
  $algorithm->finish_body;
  # now sign or verify...
  # TODO...
```

## CONSTRUCTOR

You should not create an object of this class directly. Instead, use one of the DKIM algorithm implementation classes, such as rsa\_sha1:

```
  my $algorithm = new Mail::DKIM::Algorithm::rsa_sha1(
                      Signature => $dkim_signature
                  );
```

## METHODS

### add\_body() - feeds part of the body into the algorithm/canonicalization

```
  $algorithm->add_body("This is the body.\015\012");
  $algorithm->add_body("Another line of the body.\015\012");
```

The body should be fed one "line" at a time.

### add\_header() - feeds a header field into the algorithm/canonicalization

```
  $algorithm->add_header("Subject: this is the subject\015\012");
```

The header must start with the header field name and continue through any folded lines (including the embedded \<CRLF\> sequences). It terminates with the \<CRLF\> at the end of the header field.

### finish\_body() - signals the end of the message body

```
  $algorithm->finish_body
```

Call this method when all lines from the body have been submitted. After calling this method, use **sign()** or **verify()** to get the results from the algorithm.

### finish\_header() - signals the end of the header field block

```
  $algorithm->finish_header;
```

Call this method when all the headers have been submitted.

### sign() - generates a signature using a private key

```
  $base64 = $algorithm->sign($private_key);
```

### signature() - get/set the signature worked on by this algorithm

```
  my $old_signature = $algorithm->signature;
  $algorithm->signature($new_signature);
```

### verify() - verifies a signature

```
  $result = $algorithm->verify();
```

Must be called after **finish\_body()**.

The result is a true/false value: true indicates the signature data is valid, false indicates it is invalid.

For an invalid signature, details may be obtained from `$algorithm`-\>{verification\_details} or $@.

## SEE ALSO

Mail::DKIM

## AUTHORS

- •

  Jason Long \<jason@long.name\>

- •

  Marc Bradshaw \<marc@marcbradshaw.net\>

- •

  Bron Gondwana \<brong@fastmailteam.com\> (ARC)

## THANKS

Work on ensuring that this module passes the ARC test suite was generously sponsored by Valimail (https://www.valimail.com/)

## COPYRIGHT AND LICENSE

- •

  Copyright (C) 2013 by Messiah College

- •

  Copyright (C) 2010 by Jason Long

- •

  Copyright (C) 2017 by Standcore LLC

- •

  Copyright (C) 2020 by FastMail Pty Ltd

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.
